Twitter Storm原始碼分析之Topology的執行過程
如何提交一個topology?
要提交一個topology給storm的話, 我們在命令列裡面是這麼做的:
幫助1 |
storm
jar allmycode.jar org.me.MyTopology arg1 arg2 arg3
|
那麼在這個命令的背後,storm叢集裡面發生了什麼呢?
storm裡的幕後英雄:nimbus,supervisor
看似簡單的topology提交, 其實背後充滿著血雨腥風(好吧,我誇張了), 我們來看看我們的幕後英雄nimbus, supervisor都做了什麼。
上傳topology的程式碼
首先由Nimbus$Iface
的beginFileUpload
, uploadChunk
以及finishFileUpload
方法來把jar包上傳到nimbus伺服器上的/inbox目錄
1 2 3 4 5 6 7 8 9 |
/{storm-local-dir}
|
|-/nimbus
|
|-/inbox
-- 從nimbus客戶端上傳的jar包
|
會在這個目錄裡面 |
|-/stormjar-{uuid}.jar
-- 上傳的jar包其中{uuid}表示
生成的一個uuid
|
執行topology之前的一些校驗
topology的程式碼上傳之後Nimbus$Iface
的submitTopology
方法會負責對這個topology進行處理,
它首先要對storm本身,以及topology進行一些校驗:
- 它要檢查storm的狀態是否是active的
- 它要檢查是否已經有同名的topology已經在storm裡面運行了
- 因為我們會在程式碼裡面給spout, bolt指定id, storm會檢查是否有兩個spout和bolt使用了相同的id。
- 任何一個id都不能以”__”開頭, 這種命名方式是系統保留的。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
(check-storm-active!
nimbus storm-name false)
( defn
validate-topology! [ topology ]
( let
[ bolt-ids
( keys
(.get_bolts topology))
|