<h4>前言:</h4>
因為前面講個那3個demo都是local topology運行迷守,所以對storm集群狀態(tài)下的工作情況沒有介紹太多族奢,寫面我們來詳細描述一下堤如。
<h4>一宫补、集群狀態(tài)管理及工作調(diào)度</h4>
????storm的集群表面上看和hadoop的集群非常像祈惶。但是在Hadoop上面你運行的是MapReduce的Job, 而在Storm上面你運行的是Topology米苹。它們是非常不一樣的一個關(guān)鍵的區(qū)別是: 一個MapReduce Job最終會結(jié)束稚字, 而一個Topology運永遠運行(除非你顯式的殺掉他)雕崩。
????在storm的集群里面有兩種節(jié)點: 控制節(jié)點(master node)和工作節(jié)點(worker node)秘噪±晖蹋控制節(jié)點上面運行一個后臺程序:Nimbus, 它的作用類似Hadoop里面的JobTracker缆娃。Nimbus負責在集群里面分布代碼捷绒,分配工作給機器, 并且監(jiān)控狀態(tài)贯要。每一個工作節(jié)點上面運行一個叫做Supervisor的應用(類似 TaskTracker)暖侨。Supervisor會監(jiān)聽分配給它那臺機器的工作,根據(jù)需要 啟動/關(guān)閉工作進程崇渗。每一個工作進程執(zhí)行一個Topology(類似 Job)的一個子集字逗;一個運行的Topology由運行在很多機器上的很多工作進程 Worker(類似 Child)組成京郑。
<pre>
</pre>
<b>集群狀態(tài)管理:</b>
集群的狀態(tài)是通過一個storm-cluster-state的對象來描述的。
其提供了許多功能接口葫掉,比如:
1些举、zookeeper相關(guān)的基本操作,如create-node俭厚、set-data户魏、remove-node、get-children等.
2挪挤、心跳接口叼丑,如supervisor-heartbeat!、worker-heatbeat!等.
3扛门、心跳信息鸠信,如executors-beats等.
4、啟動论寨、更新星立、停止storm,如update-storm!等.
<b>任務調(diào)度:</b>
1葬凳、zookeeper是整個集群狀態(tài)同步绰垂、協(xié)調(diào)的核心組件。
2沮明、supervisor辕坝、worker、executor等組件會定期向zookeeper寫心跳信息
3荐健、當topology出現(xiàn)錯誤酱畅、或者有新的topology提交到集群時,topologies信息會同步到zookeeper江场。
4纺酸、nimbus會定期監(jiān)視zookeeper上的任務分配信息assignments,并將重新分配的計劃同步到zookeeper址否。
所以餐蔬,nimbus會根據(jù)心跳、topologies信息及已分配的任務信息為依據(jù)佑附,來重新分配任務樊诺。
<h4>二、supervisor的工作原理:</h4>
<pre>
</pre>
1音同、worker是一個進程.
2词爬、executor是一個線程,是運行tasks的物理容器.
3权均、task是對spout/bolt/acker等任務的邏輯抽象.
supervisor會定時從zookeeper獲取拓補信息topologies顿膨、任務分配信息assignments及各類心跳信息锅锨,以此為依據(jù)進行任務分配。在supervisor同步時恋沃,會根據(jù)新的任務分配情況來啟動新的worker或者關(guān)閉舊的worker并進行負載均衡必搞。worker通過定期的更新connections信息,來獲知其應該通訊的其它worker囊咏。worker啟動時恕洲,會根據(jù)其分配到的任務啟動一個或多個executor線程。這些線程僅會處理唯一的topology匆笤。 如果有新的tolopogy被提交到集群研侣,nimbus會重新分配任務。executor線程負責處理多個spouts或者多個bolts的邏輯炮捧,這些spouts或者bolts,也稱為tasks惦银。具體有多少個worker咆课,多少個executor,每個executor負責多少個task扯俱,是由配置和指定的parallelism-hint共同決定的书蚪,但這個值并不一定等于實際運行中的數(shù)目。如果計算出的總的executors超過了nimbus的限制迅栅,此topology將不會得到執(zhí)行殊校。
<h4>三、topology提交過程</h4>
1.非本地模式下读存,客戶端通過thrift調(diào)用nimbus接口为流,來上傳代碼到nimbus并觸發(fā)提交操作.
2.nimbus進行任務分配,并將信息同步到zookeeper.
3.supervisor定期獲取任務分配信息让簿,如果topology代碼缺失敬察,會從nimbus下載代碼,并根據(jù)任務分配信息尔当,同步worker.
4.worker根據(jù)分配的tasks信息莲祸,啟動多個executor線程,同時實例化spout椭迎、bolt锐帜、acker等組件,此時畜号,等待所有connections(worker和其它機器通訊的網(wǎng)絡連接)啟動完畢缴阎,此storm-cluster即進入工作狀態(tài)。
5.除非顯示調(diào)用kill topology弄兜,否則spout药蜻、bolt等組件會一直運行瓷式。