如何設定Storm並行度

yanke_shanghai發表於2016-06-21

 

1.關於Storm並行,一些需要了解的概念
  storm的並行是由非常多的supervisor完成的。
  storm的supervisor執行的是topology中的spout/bolt task。
  task是storm中進行計算的最小的執行單位,表示的是spout、bolt的執行例項。
  程式執行的最大粒度的執行單位是程式。在supervisor中,執行task的程式稱作worker。
  supervisor節點上可以執行非常多的worker。
  在worker中可以執行執行緒的,這些執行緒稱作executor。在executor中,執行task。
  
  總結一下,supervisor(節點)>worker(程式)>executor(執行緒)>task(例項)

 

  下面以一個節點為圖例說明下 storm並行度:

 

 

2. 如何具體設定Storm的並行度

 

2.1)supervisor: 在哪個節點上啟動supervisor, 就可以在該節點進入zk內檢視storm結果集

2.2)worker:storm.yaml中,如下指定了 worker程式的埠,以及當前機器下能執行的work數量

       每個埠用於對應程式對外通訊的。

       如下配置可以不配置,在storm的 storm-core-xx.jar中的default.xml中做了預設配置。

 

  1. supervisor.slots.ports:    // 指定storm通訊埠    
  2.       - 6701  
  3.       - 6702  
  4.       - 6703  
  5.       - 6704  

 

       worker程式數量也可以透過config.setNumWorkers(workers)設定。(優先順序更高)

 

 2.3)  executor的設定:

builder.setSpout(id, spout, parallelism_hint): parallelism_hint設定spout的數量

builder.setBolt(id, bolt, parallelism_hint)設定的。parallelism_hint設定bolt的數量

 

 2.4)  task的設定:

   task是透過 spout/boltDeclarer.setNumTasks(num)設定對應spout/bolt的task個數。

 
預設情況下,每個supervisor啟動4個worker,每個worker啟動1個executor,每個executor中會有1個task。

翻譯成人類語言:  每臺機器啟動4個程式,每個程式裡面跑一個執行緒,每個執行緒來具體執行一個 bolt/spout的例項

 
即: 可以透過 config設定程式個數  透過TopologyBuilder設定spout/bolt 各自的執行緒個數, 也能透過TopologyBuilder建立的對應的

Spout/BoltDecvlarer 來設定每個執行緒執行的具體task個數。

 

設定程式碼如下:

  1. public class MyStormTopology {  
  2.   
  3.     /** 
  4.      * 並行度測試
  5.      */  
  6.     public static void main(String[] args) throws Exception {  
  7.   
  8.         //定義topology
  9.         TopologyBuilder topologyBuilder = new TopologyBuilder();  
  10.         SpoutDeclarer spoutDeclarer = topologyBuilder.setSpout("1"new MySpout2()); // 定義spout
  11.         //spoutDeclarer.setNumTasks(val);// 設定task數量  
  12.         //topologyBuilder.setSpout(id, spout, parallelism_hint); // 動態設定 spout的executor數量  
  13.         BoltDeclarer boltDeclarer = topologyBuilder.setBolt("2"new MyBolt1()).shuffleGrouping("1");// 定義bolt
  14.         //boltDeclarer.setNumTasks(num); 動態設定 task數量  
  15.         //topologyBuilder.setBolt(id, bolt, parallelism_hint); 動態設定 bolt的executor數量  
  16.   
  17.         // 在叢集中執行  
  18.         StormSubmitter stormSubmitter = new StormSubmitter();// storm叢集執行  
  19.         //HashMap conf = new HashMap();  
  20.         Config config = new Config();  
  21.         //config.setNumWorkers(workers); 動態設定每臺機器執行work程式數  
  22.         stormSubmitter.submitTopology(MyLocalStormTopology.class.getSimpleName(), config, topologyBuilder.createTopology());  
  23.           
  24.     }  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30316686/viewspace-2120629/,如需轉載,請註明出處,否則將追究法律責任。

相關文章