執行時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 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()
);
可以看到,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...