storm啟動流程


email:chenguibin2004@126.com

storm: 是一個分布式的實時流式計算框架,具有低延遲、高可用、分布式、可擴展、數據不丟失的特點,
storm包含四個核心組件:
Nimbus:負責資源分配和任務調度。
Supervisor:負責接受nimbus分配的任務,啟動和停止屬於自己管理的worker進程。---通過配置文件設置當前supervisor上啟 動多少個worker。  
Worker:運行具體處理組件邏輯的進程。Worker運行的任務類型只有兩種,一種是Spout任務,一種是Bolt任務。
Taskworker中每一個spout/bolt的線程稱為一個task. 在storm
0.8之后,task不再與物理線程對應,不同spout/bolt的task可能會共享一個物理線程,該線程稱為executor。
storm的編程模型包含以下一個方面:

TopologyStorm中運行的一個實時應用程序的名稱。(拓撲)

Spout:在一個topology中獲取源數據流的組件,通常情況下spout會從外部數據源中讀取數據,然后轉換為topology內部的源數據。

Bolt:接受數據然后執行處理的組件,用戶可以在其中執行自己想要的操作。

Tuple:一次消息傳遞的基本單元,理解為一組消息就是一個Tuple,內部是一個list。

 

Stream:表示數據的流向。
 
Storm啟動流程分析
 
------------程序員client------------------
 
1、客戶端運行storm nimbus時,會調用storm的python腳本,該腳本中為每個命令編寫一個方法,每個方法都可以生成一條相應的java命令。
   命令格式如下:java -server xxxx.ClassName -args
   nimbus---> Running:/jdk/bin/java -server  backtype.storm.daemon.nimbus
   supervisor---> Running: /jdk/bin/java -server  backtype.storm.daemon.supervisor
 
--------------nimbus---------------------   
 
   命令格式:storm jar xxx.jar   xxx驅動類  參數
   Running: /jdk/bin/java -client -Dstorm.jar=/storm/examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount-28
 
   該命令會執行 storm-starter-topologies-0.9.6.jar 中的storm-starter-topologies-0.9.6.jar的main方法,main方法中會執行以下代碼:
    StormSubmitter.submitTopology("mywordcount",config,topologyBuilder.createTopology());
 
    topologyBuilder.createTopology(),會將程序猿編寫的spout對象和bolt對象進行序列化。
 
    會將用戶的jar上傳到 nimbus物理節點的/storm/workdir/nimbus/inbox目錄下。並且改名,改名的規則是添加了一個UUID字符串。
 
    在nimbus物理節點的/storm/workdir/nimbus/stormdist目錄下。有當前正在運行的topology的jar包和配置文件,序列化對象文件。
 
 
3、nimbus接受到任務之后,會將任務進行分配,分配會產生一個assignment對象,該對象會保存到zk中,目錄是/storm/assignments ,該目錄只保存正在運行的topology任務。
 
--------supervisor------------------
 
4、supervisor通過watch機制,感知到nimbus在zk上的任務分配信息,從zk上拉取任務信息,分辨出屬於自己任務。
    ResourceWorkerSlot[hostname=192.168.1.106,memSize=0,cpu=0,tasks=[1, 2, 3, 4, 5, 6, 7, 8],jvm=<null>,nodeId=61ce10a7-1e78-4c47-9fb3-c21f43a331ba,port=6900]
 
5、supervisor 根據自己的任務信息,啟動自己的worker,並分配一個端口。
    '/export/servers/jdk/bin/java' '-server' '-Xmx768m' export/data/storm/workdir/supervisor/stormdist/wordcount1-3-1461683066/stormjar.jar' 'backtype.storm.daemon.worker' 'wordcount1-3-1461683066' 'a69bb8fc-e08e-4d55-b51f-e539b066f90b' '6701' '9fac2805-7d2b-4e40-aabc-1c85c9856d64'
 
---------worker----------------------
 
6、worker啟動之后,連接zk,拉取任務
    ResourceWorkerSlot[hostname=192.168.1.106,memSize=0,cpu=0,tasks=[1, 2, 3, 4, 5, 6, 7, 8],jvm=<null>,nodeId=61ce10a7-1e78-4c47-9fb3-c21f43a331ba,port=6900]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM