這篇文章將為大家詳細講解有關storm中parallelism的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比五常網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式五常網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋五常地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
1 storm并行的基本概念
一個運行中的拓撲是由什么構成的:工作進程(worker processes),執(zhí)行器(executors)和任務(tasks)
在一個 Storm 集群中,Storm 主要通過以下三個部件來運行拓撲:
工作進程(worker processes)(進程數(shù))
執(zhí)行器(executors)(線程數(shù))
任務(tasks)(實例組件數(shù))
storm集群中的一個機器可以運行一個或者多個worker,對應于一個或者多個topologies.1個worker進程運行1個或多個excutor線程。每個worker從屬于一個topology.executor是單線程。每1個executor運行著相同的組件(spout或bolt)的1個或多個task。1個task執(zhí)行著實際的數(shù)據(jù)處理。
下面是他們之間相互關系的簡單圖示。
2 是否需要提高workers數(shù)目
(1) 最好 一臺機器上的一個topology只使用一個worker,主要原因時減少了worker之間的數(shù)據(jù)傳輸
(2) 有更多的worker可能會有更好的表現(xiàn),這取決于你的瓶頸所在。每個worker都有通過一個線程將元組轉移到其他的worker,所以如果你的瓶頸在CPU和每個worker正在處理大量的元組,更多的worker可能會提高你的吞吐量。
所以基本上沒有明確的答案,你應該根據(jù)你的環(huán)境和設計來嘗試不同的配置。
3 executor的數(shù)目
executor是真正的并行度(事實上的并行度)。(task數(shù)目是想要設置的并行度)
executor初始數(shù)目=spout數(shù)目+bolt數(shù)目+acker數(shù)目 (這些加起來也就是task數(shù)目。)
spout數(shù)目,bolt數(shù)目,acker數(shù)目運行時是不會變化的,但是executor數(shù)目可以變化。
4 是否需要提高TASK數(shù)目
TASK的存在只是為了topology擴展的靈活性,與并行度無關。
1個task執(zhí)行著實際的數(shù)據(jù)處理。
1個worker進程執(zhí)行一個拓撲的子集。1個worker進程從屬于1個特定的拓撲,并運行著這個拓撲的1個或多個組件(spout或bolt)的1個或多個executor。一個運行中的拓撲包括集群中的許多臺機器上的許多個這樣的進程。
1個executor是1個worker進程生成的1個線程。它可能運行著1個相同的組件(spout或bolt)的1個或多個task。
1 個task執(zhí)行著實際的數(shù)據(jù)處理,你用代碼實現(xiàn)的每一個spout或bolt就相當于分布于整個集群中的許多個task。在1個拓撲的生命周期中,1個組 件的task的數(shù)量總是一樣的,但是1個組件的executor(線程)的數(shù)量可以隨著時間而改變。這意味著下面的條件總是成立:thread的數(shù)量 <= task的數(shù)量。默認情況下,task的數(shù)量與executor的數(shù)量一樣,例如,Storm會在每1個線程運行1個task。
配置拓撲的并發(fā)度
注意Storm的術語"并發(fā)度(parallelism)"是特別用來描述所謂的parallelism hint的,這代表1個組件的初始的executor(線程)的數(shù)量。在此文檔中我們使用術語"并發(fā)度"的一般意義來描述你不但可以配置executor的數(shù)量,還可以配置worker進程的數(shù)量,還可以是1個拓撲的task的數(shù)量。在用到并發(fā)度的狹義的定義時我們會特別提出。
下面的小節(jié)給出了一些不同的配置選項,還有你如何在代碼中設置它們。有多種方法可以進行設置,表格列舉了其中幾種。Storm目前有下列的配置優(yōu)先級:defaults.yaml < storm.yaml < 特定拓撲的配置 < 內部特定組件的配置 < 外部特定組件的配置。
Worker 數(shù)量
說明:拓撲在集群中運行所需要的工作進程數(shù)
配置選項:TOPOLOGY_WORKERS
在代碼中如何使用(示例):
Config#setNumWorkers
Executors(線程)數(shù)量
說明:每個組件需要的執(zhí)行線程數(shù)
配置選項:(沒有拓撲級的通用配置項)
在代碼中如何使用(示例):
TopologyBuilder#setSpout()
TopologyBuilder#setBolt()
注意:從 Storm 0.8 開始 parallelism_hint 參數(shù)代表 executor 的數(shù)量,而不是 task 的數(shù)量
Tasks 數(shù)量
說明:每個組件需要的執(zhí)行任務數(shù)
配置選項:TOPOLOGY_TASKS
在代碼中如何使用(示例):
ComponentConfigurationDeclarer#setNumTasks()
以下是配置上述參數(shù)的一個簡單示例代碼:
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2) .setNumTasks(4) .shuffleGrouping("blue-spout);
在上面的代碼中,我們?yōu)?GreenBolt 配置了 2 個初始執(zhí)行線程(executor)和 4 個關聯(lián)任務(task)。這樣,每個執(zhí)行線程中會運行 2 個任務。如果你在設置 bolt 的時候不指定 task 的數(shù)量,那么每個 executor 的 task 數(shù)會默認設置為 1。
拓撲示例
下圖顯示了一個與實際應用場景很接近的簡單拓撲的結構。這個拓撲由三個組件構成:一個名為 BlueSpout 的 spout,和兩個名為 GreenBolt 和 YellowBolt 的 bolt。這些組件之間的關系是:BlueSpout 將它的輸出發(fā)送到 GreenBolt 中,然后GreenBolt 將消息繼續(xù)發(fā)送到 YellowBolt 中。
圖中是一個包含有兩個 worker 進程的拓撲。其中,藍色的 BlueSpout 有兩個 executor,每個 executor 中有一個 task,并行度為 2;綠色的 GreenBolt 有兩個 executor,每個 executor 有兩個 task,并行度也為2;而黃色的YellowBolt 有 6 個 executor,每個 executor 中有一個 task,并行度為 6,因此,這個拓撲的總并行度就是 2 + 2 + 6 = 10。具體分配到每個 worker 就有 10 / 2 = 5 個 executor。
上圖中,GreenBolt 配置了 task 數(shù),而 BlueSpout 和 YellowBolt 僅僅配置了 executor 數(shù)。下面是相關代碼:
Config conf = new Config(); conf.setNumWorkers(2); // use two worker processestopologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2topologyBuilder.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 還有一些其他的配置項可以控制拓撲的并行度,包括:
TOPOLOGY_MAX_TASK_PARALLELISM:該選項設置了一個組件最多能夠分配的 executor 數(shù)(線程數(shù)上限),一般用于在本地模式運行拓撲時測試分配線程的數(shù)量限制。你可以通過 Config#setMaxTaskParallelism() 來配置該參數(shù)。
如何修改運行中的拓撲的并行度
Storm 的一個很有意思的特點是你可以隨時增加或者減少 worker 或者 executor 的數(shù)量,而不需要重啟集群或者拓撲。這個方法就叫做再平衡(rebalance)。
有兩種方法可以對一個拓撲執(zhí)行再平衡操作:
使用 Storm UI
使用以下所示的客戶端(CLI)工具
下面是使用 CLI 工具的一個簡單示例:
## 重新配置拓撲 "mytopology",使得該拓撲擁有 5 個 worker processes,## 另外,配置名為 "blue-spout" 的 spout 使用 3 個 executor,## 配置名為 "yellow-bolt" 的 bolt 使用 10 個 executor。$ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
關于“storm中parallelism的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。