Storm流數據框架------學習筆記

storm:


Storm可用於許多領域中,如實時分析、在線機器學習、持續計算、遠程RPC、數據提取加載轉換等
Storm具有以下主要特點
整合性
簡易的API
可擴展性
可靠的消息處理
支持各種編程語言
快速部署

免費、開源

storm主要包括:Streams、Spouts、Bolts、Topology和Stream Groupings;

stream:Storm將流數據Stream描述成一個無限的Tuple序列,這些Tuple序列會以分佈式的方式並行地創建和處理;


每個tuple是一堆值,每個值有一個名字,並且每個值可以是任何類型

Tuple本來應該是一個Key-Value的Map,由於各個組件間傳遞的tuple的字段名稱已經事先定義好了,所以Tuple只需要按序填入各個Value,所以就是一個Value List(值列表)

Spout:Storm認爲每個Stream都有一個源頭,並把這個源頭抽象爲Spout;

通常Spout會從外部數據源(隊列、數據庫等)讀取數據,然後封裝成Tuple形式,發送到Stream中。Spout是一個主動的角色,在接口內部有個nextTuple函數,Storm框架會不停的調用該函數


Bolt:Storm將Streams的狀態轉換過程抽象爲Bolt。Bolt即可以處理Tuple,也可以將處理後的Tuple作爲新的Streams發送給其他Bolt;
Bolt可以執行過濾、函數操作、Join、操作數據庫等任何操作

Bolt是一個被動的角色,其接口中有一個execute(Tuple input)方法,在接收到消息之後會調用此函數,用戶可以在此方法中執行自己的處理邏輯;


Topology:Storm將Spouts和Bolts組成的網絡抽象成Topology,它可以被提交到Storm集羣執行。

Topology可視爲流轉換圖,圖中節點是一個Spout或Bolt,邊則表示Bolt訂閱了哪個Stream。當Spout或者Bolt發送元組時,它會把元組發送到每個訂閱了該Stream的Bolt上進行處理;

Topology裏面的每一個組件都是並行運行的;

在Topology裏面可以指定每個組件的並行度, Storm會在集羣裏面分配那麼多的線程來同時計算

在Topology的具體實現上,Storm中的Topology定義僅僅是一些Thrift結構體(二進制高性能的通信中間件),支持各種編程語言進行定義


Stream Groupings:Storm中的Stream Groupings用於告知Topology如何在兩個組件間(如Spout和Bolt之間,或者不同的Bolt之間)進行Tuple的傳送。每一個Spout和Bolt都可以有多個分佈式任務,一個任務在什麼時候、以什麼方式發送Tuple就是由Stream Groupings來決定的


(1)ShuffleGrouping:隨機分組,隨機分發Stream中的Tuple,保證每個Bolt的Task接收Tuple數量大致一致
(2)FieldsGrouping:按照字段分組,保證相同字段的Tuple分配到同一個Task中
(3)AllGrouping:廣播發送,每一個Task都會收到所有的Tuple
(4)GlobalGrouping:全局分組,所有的Tuple都發送到同一個Task中
(5)NonGrouping:不分組,和ShuffleGrouping類似,當前Task的執行會和它的被訂閱者在同一個線程中執行
(6)DirectGrouping:直接分組,直接指定由某個Task來執行Tuple的處理


節點方式:

Numbus/Supervisor;類似於Master/Slave;

storm用Zookeeper來作爲分佈式協調組件,負責Nimbus和多個Supervisor之間的所有協調工作。藉助於Zookeeper,若Nimbus進程或Supervisor進程意外終止,重啓時也能讀取、恢復之前的狀態並繼續工作,使得Storm極其穩定;


Worker進程:

(1)Worker進程:每個worker進程都屬於一個特定的Topology,每個Supervisor節點的worker可以有多個,每個worker對Topology中的每個組件(Spout或 Bolt)運行一個或者多個executor線程來提供task的運行服務
(2)Executor:executor是產生於worker進程內部的線程,會執行同一個組件的一個或者多個task。

(3)Task:實際的數據處理由task完成


工作流程:

所有Topology任務的提交必須在Storm客戶端節點上進行,提交後,由Nimbus節點分配給其他Supervisor節點進行處理

Nimbus節點首先將提交的Topology進行分片,分成一個個Task,分配給相應的Supervisor,並將Task和Supervisor相關的信息提交到Zookeeper集羣上

Supervisor會去Zookeeper集羣上認領自己的Task,通知自己的Worker進程進行Task的處理



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章