storm為分布式實時計算提供了一組通用原語,可被用於「流處理」之中,實時處理訊息並更新資料庫。這是管理佇列及工作者集群的另一種方式。 storm也可被用於「連續計算」(continuous computation),對資料流做連續查詢,在計算時就將結果以流的形式輸出給使用者。它還可被用於「分布式rpc」,以並行的方式執行昂貴的運算。 storm的主工程師nathan marz表示:
storm可以方便地在乙個計算機集群中編寫與擴充套件複雜的實時計算,storm之於實時處理,就好比 hadoop之於批處理。storm保證每個訊息都會得到處理,而且它很快——在乙個小集群中,每秒可以處理數以百萬計的訊息。更棒的是你可以使用任意程式語言來做開發。
1.storm集群的組成
storm集群和hadoop集群非常相似,hadoop集群執行mapreduce作業,storm執行topologies。mapreduce作業和topologies的區別很大,前者主要進行批處理,對實時性要求不高,後者用於實時流處理;前者作業處理完資料就結束了,後者會一直對流進行處理(直到顯式的關掉topologies)
和hadoop集群對應,storm有兩種型別的節點:主節點被稱為「nimbus」,對應於hadoop的「jobtracker」,扶著分發**到整個集群,分配任務給機器,監控任務失敗;從節點被稱為「supervisor」,對應與hadoop的「tasktracker」,監聽nimbus派發給機器的任務,啟動或者停止處理nimbus派發給它的任務。
storm集群由乙個主節點和多個從節點組成,每個從節點處理topologies的乙個子集
nimbus和所有supervisor的協調工作是通過zookeeper集群完成的。 nimbus守護程序和supervisor守護程序都是快速失敗的並且是無狀態的,所有的狀態都由zookeeper儲存或者儲存在本地磁碟上。這也就意味著你可以使用kill -9命令殺死nimbus或者supervisor守護程序,但是集群會馬上啟動備份,而對使用者而言這些都是透明的。這樣的機制使storm集群非常的穩定可靠
2.topologies
storm集群裡的實時計算被稱為topologies。topology是乙個關於計算的圖,每個節點表示計算邏輯,節點之間的連線表示資料怎麼在節點之間傳輸。執行topologies也非常簡單,首先將所有的**和依賴打包成乙個jar檔案,然後使用
storm jar all-my-code.jar backtype.storm.mytopology arg1 arg2
命令將topology提交給集群。
topologies是thrift結構,nimbus是thrift服務,所以可以使用任何語言建立和提交topologies。
3.streams
storm的乙個核心概念是stream(流),流是無限的元組序列,storm實現了將乙個流變換成另乙個新流的框架,這種變換是分布式的,可靠的。流變化的兩個基礎概念是spout和bolt。spout是流的源,負責從外界獲取資料,將資料轉化為流形式提供給storm(具體來說是bolt)。bolt負責消費spout或者其他bolt產生的流,對流進行處理,產生新的流。bolt可以做任何你想做的處理,包括過濾,多個流的聚集,聯合,訪問資料庫等等。
topology是多個spout和多個bolt組成的圖,用於提交給storm集群執行。圖中的每個節點要麼是spout要麼是bolt,邊表示bolt訂閱了那個流,spout或者bolt發射元組到流裡,流將該元組傳送到所有訂閱了該流的bolt。
storm中的每個節點都是並行執行的,每個節點的並行度都是可以設定的,storm框架按照設定好的並行度在該節點建立這麼多執行緒來並行執行。
topology會一直執行,storm會對失敗的任務自動重新分配,同時storm保證不會有資料丟失,即使是機器死掉。
4.storm執行模式
本地模式(local mode)
本地模式主要是用於測試和開發topologies,執行本地模式可以看到流之間這麼傳輸的,這樣可以很方便的除錯topologies相關的程式。本地模式是使用程序來模擬storm集群
分布模式(distributed mode)
分布模式是真正的storm應用模式,提交乙個topology給nimbus,nimbus會負責分發相關的**,分配任務給各個supervisor去執行,如果supervisor失敗,nimbus重新分配失敗的任務
Storm基本概念
原文 寫在前面的話 請允許我廢話幾句。這個系列的文章發布的時間是在我完成了storm的專案開發之後才找出來時間寫的,在研究storm過程中,國內較好的參考文章實在有限,大多是入門和概念剖析。storm的googlegroup對於新手來說實在不友好。有經驗人士都不願意回答新手的一些 愚蠢 的問題。現在...
Storm 基本概念
storm 是乙個免費並開源的分布式實時計算系統。利用storm 可以很容易做到可靠地處理無限的資料流,像hadoop 批量處理大資料一樣,storm 可以實時處理資料。storm 集群的master 節點,負責分發使用者 指派給具體的supervisor 節點上的worker 節點,去執行topo...
Storm系列之 基本概念
寫在前面的話 請允許我廢話幾句。這個系列的文章發布的時間是在我完成了storm的專案開發之後才找出來時間寫的,在研究storm過程中,國內較好的參考文章實在有限,大多是入門和概念剖析。storm的googlegroup對於新手來說實在不友好。有經驗人士都不願意回答新手的一些 愚蠢 的問題。現在因為s...