Storm中並發程度的理解


Storm中涉及到了很多組件,例如nimbus,supervisor等等,在參考了這兩篇文章之后,對這個有了更好的理解。

Understanding the parallelism of a Storm topology

https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topology

http://www.cnblogs.com/yufengof/p/storm-worker-executor-task.html

 

我們先理一下概念:

  1. 一般對於物理節點來講,我們部署的節點的類型包括nimbus(master),supervisor(slave),通常是一個nimbus,多個supervisor。nimbus是負責安排任務給supervisor去完成的,即supervisor是實際上干活的。
  2. 而對於一個supervisor來講,它可以包含多個worker,worker有可以包含多個executor,executor又可以執行多個task。

這樣一說就有點亂,因為這個worker、executor、task和topology,spout和bolt之間又是怎么樣的對應關系呢??

首先看下面一張圖

               

supervisor和node是一一對應的關系,而worker就是process(進程),executor就是thread(線程),task就是在spout或bolt中定義的函數。

這樣就好理解了,這些從上到下都是一對多的關系。

那supervisor,worker和executor跟topology或component(包括spout和bolt)之間的對應關系呢?

  1. 一個topology可以在多個supervisor上執行,一個supervisor也可以執行多個topology
  2. 但是,一個worker只執行某個topology,一個topology由多個worker來執行
  3. 一個executor可以執行一個component中的多個task,但是一個component可以由多個executor來執行,這就是我們在編程中指定的並發程度。后面會看到。
  4. 一個executor默認對應一個task
  5. 一個worker中包含多個executor,但是這些executor不一定都是用來處理同一個component

 

我們看storm wiki中的一張圖片來解釋

                    

 

對於這個topology,

  1. 它包含3個component,1個spout,2個bolt
  2. 它包含2個worker process,10個executor thread,12個task
  3. 同顏色屬於同一個component
 1 Config conf = new Config();
 2 conf.setNumWorkers(2); // use two worker processes
 3 
 4 topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2
 5 
 6 topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
 7                .setNumTasks(4)
 8                .shuffleGrouping("blue-spout");
 9 
10 topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6)
11                .shuffleGrouping("green-bolt");
12 
13 StormSubmitter.submitTopology(
14         "mytopology",
15         conf,
16         topologyBuilder.createTopology()
17     );

代碼如上,worker process,executor thread,task這些的數目都可以進行設置。

所以接下來我們應該會關心一個topology默認對應的worker數是多少?一個executor默認對應的task數是多少?

 

更重要的是,我們在編碼過程中已經指定了worker process數和exector thread數,但是這兩個數可以在運行時被修改,以更好地適應負載的變化!這樣的方式叫做rebalance!

它能夠修改worker的數目,也就是說我們是否可以通過監控,來實現自動水平拓展呢??例如結合IaaS,加一個supervisor節點加入到集群中?同時啟動對應的worker進程,當負載低的時候,收回對應的supervisor節點,將虛擬機返回到對應的VM池里呢??

注意一點是:Task的數目在啟動后就不能變了,但是可以改executor,即執行的線程數,所以executor數一定是小於等於task數,才能保證每一個executor至少有一個task可以運行.

所以對於task數太少,后期也無法提高太多!

  1. 第一種方式是使用storm的UI
  2. 第二種方式是使用CLI tool來修改
# Reconfigure the topology "mytopology" to use 5 worker processes,
# the spout "blue-spout" to use 3 executors and
# the bolt "yellow-bolt" to use 10 executors.

$ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

具體請參考wiki的文章

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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