1. 程式人生 > >【原】【譯文】理解storm拓撲並行度

【原】【譯文】理解storm拓撲並行度

rec 分享 矩形 bolt pos div pro out data

原文地址: 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工具的示例:

## 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

【原】【譯文】理解storm拓撲並行度