大數據學習之(Storm)-原理詳解!
Client
client的主要作用是提交topology到集群
Worker
Worker是運行在Supervisor節點上的一個獨立的JVM進程,主要作用是運行topology,一個topology可以包含多個worker,但一個worker只能屬於一個topology
Exceutor
在Worker中運行的線程,一個Executor可以對應一個或多個Task,每個Task(Spout或Bolt)必須對應一個Executor。
Task
一個獨立的處理邏輯的實例,每個Spout或Bolt都可以對應多個Task在集群中運行,每個線程對應到一個Executor線程上。
streaminggroup定義了如何從一堆Task發送數據到另外一堆Task上。
Storm集群的啟動、任務提交與執行流程
啟動
客戶運行storm nimbus或storm supervisor時,在storm腳本內部實際對應了兩個python函數,這兩個函數最終會生成一條java命令,用於啟動一個storm的java進程:
java -server xxxx.xxxx.nimbus/supervisor args
1
任務提交
運行storm java xxxx.MainClass name,此時會執行Driver驅動類的main函數
在驅動類中,會調用topologyBuilder.createTopology()方法,該方法會生成spout和bolt的序列化對象
客戶端把topology對應的jar上傳的到nimbus的storm-local/nimbus/inbox目錄下
-rw-rw-r--. 1 hadoop hadoop 3615 5月 6 23:47 stormcode.ser
-rw-rw-r--. 1 hadoop hadoop 733 5月 6 23:47 stormconf.ser
1
2
3
接下來進行任務分配,分配完成後會產生一個assegiment對象,該對象會被序列化後保存到zookeeper的/storm/assignments/wordcount01-2-1525621662目錄下
supervisor通過zookeeper的watch機制感知/storm/assignments目錄變化,拉取數據自己的topology(nimbus進行分配時,會指定task所屬的supervisor)
supversior根據拉取到的信息在指定端口上啟動worker,實際上就是執行一條java腳本
java -server xxxxx.xxxx.worker
1
worker啟動後,根據分配的task信息開始執行。
大數據學習交流群 766988146 不管你是小白還是大牛,筆者我都挺歡迎,今天的源碼已經上傳到群文件,不定期分享幹貨,
包括我自己整理的一份最新的適合2018年學習的大數據開發和零基礎入門教程,歡迎初學和進階中的小夥伴
大數據學習之(Storm)-原理詳解!