【原】【譯文】理解storm拓撲並行度
原文地址: http://storm.apache.org/releases/1.2.1/Understanding-the-parallelism-of-a-Storm-topology.html
什麽構成一個運行的拓撲:工作進程,執行器和任務
storm區分以下三個用於在Storm集群中實際運行拓撲的主要實體:
1. 工作進程
2. 執行器(線程)
3. 任務
這是他們的關系的一個簡單的說明
【譯者理解:1個工作進程(worker)可包括1或多個執行器(executor/thread),1個執行器可包括1或多個任務(task)】
一個工作進程執行拓撲的子集,一個工作進程屬於一個特定的拓撲,可以針對該拓撲的一個或多個組件(spouts或bolts)運行一個或多個執行器。
一個正在運行的拓撲由Storm集群內許多機器上運行的許多此類進程組成。
一個執行器是由工作進程產生的線程。 它可以為同一個組件(spouts或bolts)運行一個或多個任務。
一個任務是執行實際的數據處理,您在代碼中實現的每個spout或bolt在集群中執行許多任務。 組件的任務數量在拓撲的整個生命周期中始終保持不變,但組件的執行器(線程)數量可隨時間變化。 這意味著以下條件成立:#threads≤#tasks(線程數量<=任務數量)。 默認情況下,任務的數量設置為與執行器的數量相同,即Storm將為每個線程運行一個任務。
配置拓撲並行度
工作進程數量
- 描述:為集群中的拓撲創建多少個工作進程
- 配置項:TOPOLOGY_WORKERS
- 在代碼中如何設置:
- Config#setNumWorkers
執行器數量(線程)
- 描述:每個組件產生多少個執行器
- 配置項:無(通過在setSpout或setBolt傳遞parallelism_hin參數)
- 在代碼中如何設置:
- TopologyBuilder#setSpout()
- TopologyBuilder#setBolt()
任務數量
- 描述:每個組件產生多少個任務
- 配置項:TOPOLOGY_TASKS
- 在代碼中如何設置:
- ComponentConfigurationDeclarer#setNumTasks()
實踐中的代碼片段如下:
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4)
.shuffleGrouping("blue-spout");
在上面的代碼中,我們配置了Storm來運行初始值為兩個執行器和四個相關任務的GreenBolt。 Storm將為每個執行器(線程)運行兩個任務。 如果您沒有明確配置任務數量,Storm將默認每個執行程序運行一個任務。
拓撲實例
如下插圖顯示了一個簡單拓撲,該拓撲由三個組件構成:分別是BlueSpout和GreenBolt和YellowBolt。
這些組件被連接起來,BlueSpout輸出到GreenBolt,GreenBolt輸出到YellowBolt。
【譯者理解:由上圖知,該拓撲合計並行度為10(2+2+6),每個工作進程將產生5(10/2)個線程,上圖中表現出了2個工作進程(Worker Process),與它們各自當中有5個線程(5個矩形框),其中有一個矩形框包括2個綠色Task, 是因為GreenBolt的parallelism hint為2,task number為4, 4/2=2】
相應的代碼如下:
Config conf = new Config();
conf.setNumWorkers(2); // use two worker processes
topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
.setNumTasks(4)
.shuffleGrouping("blue-spout");
topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6)
.shuffleGrouping("green-bolt");
StormSubmitter.submitTopology(
"mytopology",
conf,
topologyBuilder.createTopology()
);
如何修改一個正在運行拓撲的並行度
Storm的一個非常好的功能是,您可以增加或減少工作進程和/或執行器的數量,而無需重新啟動群集或拓撲。 這叫作重新平衡。
您有兩個選項來重新平衡拓撲:
1. 使用Storm Web UI重新平衡拓撲。
2. 使用如下所述CLI工具重新平衡。
以下是使用CLI工具的示例:
|
【原】【譯文】理解storm拓撲並行度