理解Storm Topology的併發機制

2021-09-01 16:03:33 字數 3717 閱讀 2310

執行時topology的組成:worker processes、executors(執行者執行緒)以及tasks

storm區分了以下三個主要的實體並用來在storm集群上執行起乙個topology:

1.worker processes

2.executors(執行緒)

3.tasks

下面是這3者關係的乙個簡單示例:

乙個worker process負責執行topology的部分子集。單個worker process歸屬於乙個特定的topology並且可以為該topology的乙個或多個元件(spouts或者bolts)執行乙個或者多個executors。乙個執行的topology由storm集群中多台機器上執行著的多個processes(程序)組成。

乙個executor其實就是由乙個worker process生成的執行緒。executor將會為同乙個元件(spout/bolt)執行多個tasks(任務)。

乙個task負責進行資料處理---我們的**實現的每個spout或者bolt會在集群上執行許多的任務。乙個元件的tasks的數量在topology的整個生命週期中都是一樣的。但是乙個元件的executors的數量卻會改變。這就意味著出出現這樣一種情形:#threads <= #tasks。預設情況下,executor的數量與task的數量會設定成一樣。例如:storm中會每個executor執行乙個task。

topology的併發設定

注意storm中的術語"parallelism"被用來特指storm中的parallelism hint,parallelism hint的意思是乙個元件的初識executor的數量。這個文件中我們就用"parallelism"(併發)這個更寬泛的術語來描述:不僅僅限於executors的數量,還有worker processes的數量以及tasks的數量。在用"parallelism"來標識正常或者更特指的定義時,我們會特別提醒的。

接下來對多種配置選項的乙個概覽。我在storm配置概覽這篇文章中提到了storm配置的優先順序:defaults.yamlworker processes的數量

·描述:為topology在集群機器上建立多少work processes。

·配置項:topology_workers

·如何在**中設定

executors(執行緒)的數量

·描述:每個元件產生多少executors

·配置項:無(通過setspout或者setbolt中的parallelism_hint引數設定)

task的數量

·描述:為每個元件建立多少task

·配置項:topology_tasks

·如何在**中設定(只是個例子):

·componentconfigurationdeclarer#setnumtasks()

下面給出了這些配置的乙個例子

topologybuilder.setbolt("green-bolt", new greenbolt(), 2).setnumtasks(4).shufflegrouping("blue-spout");在**中我們配置了storm中的bolt(greenbolt)其中初始的executor數量為2以及相關taks數為4。storm將會使每個executor執行兩個task。如果沒有顯式的配置task數,storm會每個executor執行乙個task。

乙個執行中的topology示例

下面這個示例展示了乙個簡單的topology的執行。這個topology有3個元件組成:乙個spout(bluespout)以及兩個bolt(greenbolt和yellowbolt)。由bluespout傳送線性給greenbolt,然後,greenbolt傳送訊息給yellowbolt。

下面給出相應**:

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()

);

可以看到,bluespout與yellowbolt未設定task數,故預設task數與executor數相同。而greenbolt設定了task數為4,故每個executor執行兩個task。

storm有額外的配置設定來控制topology的併發數:

·topology_max_task_parallelism:這個設定對每個元件能生成的executor數設定了乙個上限。這個典型的是在測試的時候,我們在本地模式下限制執行緒的數量。我們可以通過 config#setmaxtaskparallelism()來進行設定。

如何改變乙個執行中的topology的併發量

storm中的乙個靈活的特徵就是我們可以在不重啟集群或者topology的情況下改變worker proceses以及executors的數量。這個過程叫做rebalancing(再均衡)

我們有兩個選項來進行再均衡:

1.用storm提供的web介面

2.通過命令列(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

dropout理解 簡易理解

所謂的dropout,從字面意思理解,就是 拋棄 拋棄什麼呢?拋棄的是網路中隱藏層的節點 輸入層和輸出層是由資料型別和問題型別決定的,當然不能動啦!怎麼拋棄呢?dropout有乙個引數p,p的取值介於0和1,含義是每個節點有p概率被拋棄。被拋棄對這個節點有什麼影響呢?dropout對於節點的影響表現...

怎麼理解ESB(純屬個人理解)

背景,隨著公司系統越來越多,系統之間的互動也越來越多,如果服務之家沒有相應的管理支撐的話,將會出現各種點對點,混亂不堪,對於服務之間的解決方案有很多種,這裡介紹下,目前公司用到的,基於soa思想的esb,企業服務匯流排。esb 同步過程可以理解為中介或者 類似 非同步可以理解為快取資料庫,所有客戶端...

MapReduce理解 深入理解MapReduce

化簡 reducing 遍歷集合中的元素來返回乙個綜合的結果。即,輸出表單裡一列數字的和這個任務屬於reducing。input,資料讀入 123456 設定資料輸入 fileinputformat.setinputpaths job,args 0 fileinputformat.setinputd...