2013-06-23 88 views
41

「任務」我想通過下面的大文章「Understanding the parallelism of a Storm topology什麼是風暴並行

學習Twitter的風暴但是我有點通過的「任務」的概念混淆。任務是組件的運行實例(噴嘴還是螺栓)?實際上有多個任務的執行者是說執行者多次執行相同的組件,我是否正確?

而且在一般意義上的並行,風暴將產生一個噴口或螺栓專用線程(執行者),但什麼是通過具有多個任務執行人(線程)爲可並行?我認爲線程中有多個任務,因爲一個線程按順序執行,只會使線程成爲一種「緩存」資源,避免爲下一次任務運行產生新線程。我對麼?

我可以通過自己花更多的時間來調查後清除這些困惑,但你知道,我們都愛計算器;-)

在此先感謝。

+1

我已閱讀文檔三次以清除相同的混淆,並解決了我的問題。 – pavan

回答

62

聲明:我寫了the article你引用你的問題上面。

但是我對「任務」的概念有些困惑。任務是組件的運行實例(噴嘴還是螺栓)?實際上有多個任務的執行者是說執行者多次執行相同的組件,我是否正確?

是的,是的。

此外,在一般的並行性意義上,Storm會爲噴口或螺栓產生一個專用線程(執行程序),但是具有多個任務的執行程序(線程)對並行性有什麼貢獻?

運行每執行多個任務不增加並行的水平 - 執行人總是有它使用其所有的任務,這意味着對任務的執行順序運行一個線程。

正如我在文章中寫道:請注意:

  • 執行線程的數量是可以改變的拓撲結構開始後(見storm rebalance命令)。
  • 拓撲的任務數量是靜態的。

並且根據定義,存在#executors <= #tasks的不變量。

因此,每個執行程序線程執行2個任務的一個原因是,您可以靈活地在未來拓展/擴展通過storm rebalance命令的拓撲,而無需使拓撲脫機。例如,想象一下,從15臺機器的風暴集羣開始,但已經知道下週還會添加10個盒子。在這裏,你可以選擇在已經在15個初始盒子上的25臺機器的預期並行水平上運行拓撲(當然這比25盒子要慢)。一旦集成了額外的10個盒子,您就可以通過storm rebalance拓撲結構充分利用所有25個盒子,而無需任何停機時間。

對每個執行器運行2+任務的另一個原因是(主要是功能性)測試。例如,如果你的開發機器或CI服務器只有足夠強大的運行能力,比如2個執行器以及機器上運行的所有其他東西,那麼仍然可以運行30個任務(這裏是每個執行器15個),以查看代碼您的自定義Storm組合按預期工作。

實際上,我們通常每個執行者運行1個任務。

PS:請注意,Storm實際上會產生a few more threads behind the scenes。例如,每個執行器都有自己的「發送線程」,負責處理傳出的元組。還有例如「系統級」的後臺線程。 acking與「你的」線程一起運行的元組。 IIRC除了「你的」線程之外​​,Storm UI還會計算這些線程。

+1

謝謝Michael。現在非常清楚。 –

+0

@miguno我有一個問題,假設你最初有一個執行任務的螺栓(就像對一些批量元組進行分組操作一樣),我怎樣才能垂直擴展它?根據我的理解,每個工作人員本質上都是拓撲結構的「鏡像」,但我如何垂直擴展以將負載分佈到所有集羣箱中。在這種情況下,我想將執行分組操作的螺栓數量從1更改爲2(或更多)。你的意見澄清這將是非常棒的。 – jtimz

相關問題