推ter Storm 開源實時Hadoop簡介

碼頭工人 13年前發布 | 19K 次閱讀 云計算

推ter 將 Storm 正式開源了,這是一個分布式的、容錯的實時計算系統,它被托管在 GitHub 上,遵循 Eclipse Public License 1.0。Storm 是由 BackType 開發的實時處理系統,BackType 現在已在 推ter 麾下。GitHub 上的最新版本是 Storm 0.5.2,基本是用 Clojure 寫的。

Storm 為分布式實時計算提供了一組通用原語,可被用于“流處理”之中,實時處理消息并更新數據庫。這是管理隊列及工作者集群的另一種方式。Storm 也可被用于“連續計算”(continuous computation),對數據流做連續查詢,在計算時就將結果以流的形式輸出給用戶。它還可被用于“分布式 RPC”,以并行的方式運行昂貴的運算。Storm 的主工程師 Nathan Marz 表示:

Storm 可以方便地在一個計算機集群中編寫與擴展復雜的實時計算,Storm 之于實時處理,就好比 Hadoop 之于批處理。Storm 保證每個消息都會得到處理,而且它很快——在一個小集群中,每秒可以處理數以百萬計的消息。更棒的是你可以使用任意編程語言來做開發。

Storm 的主要特點如下:

  1. 簡單的編程模型。類似于 MapReduce 降低了并行批處理復雜性,Storm 降低了進行實時處理的復雜性。
  2. 可以使用各種編程語言。你可以在 Storm 之上使用各種編程語言。默認支持 Clojure、Java、Ruby 和 Python。要增加對其他語言的支持,只需實現一個簡單的 Storm 通信協議即可。
  3. 容錯性。Storm 會管理工作進程和節點的故障。
  4. 水平擴展。計算是在多個線程、進程和服務器之間并行進行的。
  5. 可靠的消息處理。Storm 保證每個消息至少能得到一次完整處理。任務失敗時,它會負責從消息源重試消息。
  6. 快速。系統的設計保證了消息能得到快速的處理,使用ØMQ 作為其底層消息隊列。
  7. 本地模式。Storm 有一個“本地模式”,可以在處理過程中完全模擬 Storm 集群。這讓你可以快速進行開發和單元測試。

Storm 集群由一個主節點和多個工作節點組成。主節點運行了一個名為“Nimbus”的守護進程,用于分配代碼、布置任務及故障檢測。每個工作節點都運行了一個名為“Supervisor”的守護進程,用于監聽工作,開始并終止工作進程。Nimbus 和 Supervisor 都能快速失敗,而且是無狀態的,這樣一來它們就變得十分健壯,兩者的協調工作是由 Apache ZooKeeper 來完成的。

Storm 的術語包括 Stream、Spout、Bolt、Task、Worker、Stream Grouping 和 Topology。Stream 是被處理的數據。Sprout 是數據源。Bolt 處理數據。Task 是運行于 Spout 或 Bolt 中的線程。Worker 是運行這些線程的進程。Stream Grouping 規定了 Bolt 接收什么東西作為輸入數據。數據可以隨機分配(術語為 Shuffle),或者根據字段值分配(術語為 Fields),或者廣播(術語為 All),或者總是發給一個 Task(術語為 Global),也可以不關心該數據(術語為 None),或者由自定義邏輯來決定(術語為 Direct)。Topology 是由 Stream Grouping 連接起來的 Spout 和 Bolt 節點網絡。在 Storm Concepts 頁面里對這些術語有更詳細的描述。

可以和 Storm 相提并論的系統有 EsperStreambaseHStreamingYahoo S4。其中和 Storm 最接近的就是 S4。兩者最大的區別在于 Storm 會保證消息得到處理。這些系統中有的擁有內建數據存儲層,這是 Storm 所沒有的,如果需要持久化,可以使用一個類似于 Cassandra 或 Riak 這樣的外部數據庫。

入門的最佳途徑是閱讀 GitHub 上的官方《Storm Tutorial》。其中討論了多種 Storm 概念和抽象,提供了范例代碼以便你可以運行一個 Storm Topology。開發過程中,可以用本地模式來運行 Storm,這樣就能在本地開發,在進程中測試 Topology。一切就緒后,以遠程模式運行 Storm,提交用于在集群中運行的 Topology。Maven 用戶可以使用 clojars.org 提供的 Storm 依賴,地址是 http://clojars.org/repo。

要運行 Storm 集群,你需要 Apache ZookeeperØMQJZMQ、Java 6 和 Python 2.6.6。ZooKeeper 用于管理集群中的不同組件,ØMQ 是內部消息系統,JZMQ 是ØMQ 的 Java Binding。有個名為 storm-deploy 的子項目,可以在 AWS 上一鍵部署 Storm 集群。關于詳細的步驟,可以閱讀 Storm Wiki 上的《Setting up a Storm cluster》

欲了解 Storm 的更多信息,請訪問官方 Storm Wiki。你也可以加入 Storm 郵件列表和 freenode 上的 Storm IRC(#storm-user)。

查看英文原文:推ter Storm: Open Source Real-time Hadoop
      來自: InfoQ

 本文由用戶 碼頭工人 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!