一、前述
為了提高Storm的並行能力,通常需要設定並行。
二、具體原理
1. Storm並行分為幾個方面:
Worker – 程式
一個Topology拓撲會包含一個或多個Worker(每個Worker程式只能從屬於一個特定的Topology)
這些Worker程式會並行跑在叢集中不同的伺服器上,即一個Topology拓撲其實是由並行執行在Storm叢集中多臺伺服器上的程式所組成
Executor – 執行緒
Executor是由Worker程式中生成的一個執行緒
每個Worker程式中會執行拓撲當中的一個或多個Executor執行緒
一個Executor執行緒中可以執行一個或多個Task任務(預設每個Executor只執行一個Task任務),但是這些Task任務都是對應著同一個元件(Spout、Bolt)。
Task
實際執行資料處理的最小單元
每個task即為一個Spout或者一個Bolt
注意:
Task數量在整個Topology生命週期中保持不變,Executor數量可以變化或手動調整
(預設情況下,Task數量和Executor是相同的,即每個Executor執行緒中預設執行一個Task任務)
2.在程式中具體設定:
設定Worker程式數
Config.setNumWorkers(int workers)
設定Executor執行緒數
TopologyBuilder.setSpout(String id, IRichSpout spout, Number parallelism_hint)
TopologyBuilder.setBolt(String id, IRichBolt bolt, Number parallelism_hint)
:其中, parallelism_hint即為executor執行緒數
設定Task數量
ComponentConfigurationDeclarer.setNumTasks(Number val)
例:
Config conf = new Config() ;
conf.setNumWorkers(2);//設定worker數
TopologyBuilder topologyBuilder = new TopologyBuilder();
topologyBuilder.setSpout("spout", new MySpout(), 1);//設定執行緒數
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4)//設定總共的task數這個Bolt任務的
.shuffleGrouping("blue-spout);
3.案例詳解
4.Rebalance – 再平衡
即,動態調整Topology拓撲的Worker程式數量、以及Executor執行緒數量
支援兩種調整方式:
1、通過Storm UI
2、通過Storm CLI(一般用這個!!!)
通過Storm CLI動態調整:
例:storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
將mytopology拓撲worker程式數量調整為5個
“ blue-spout ” 所使用的執行緒數量調整為3個
“ yellow-bolt ”所使用的執行緒數量調整為10個
PS:當調整的task或者worker程式超過叢集配置時,還是按叢集最大配置執行。