首先我們通過一個(gè) storm 和hadoop的對(duì)比來了解storm中的基本概念。
昌樂網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
Hadoop | Storm | |||
系統(tǒng)角色 | JobTracker | Nimbus | ||
TaskTracker | Supervisor | |||
Child | Worker | |||
應(yīng)用名稱 | Job | Topology | ||
組件接口 | Mapper/Reducer | Spout/Bolt |
接下來我們?cè)賮砭唧w看一下這些概念。
a、Nimbus:負(fù)責(zé)資源分配和任務(wù)調(diào)度。
b、Supervisor:負(fù)責(zé)接受nimbus分配的任務(wù),啟動(dòng)和停止屬于自己管理的worker進(jìn)程。
c、Worker:運(yùn)行具體處理組件邏輯的進(jìn)程。
d、Task:worker中每一個(gè)spout/bolt的線程稱為一個(gè)task. 在storm0.8之后,task不再與物理線程對(duì)應(yīng),同一個(gè)spout/bolt的task可能會(huì)共享一個(gè)物理線程,該線程稱為executor。
Topology:storm中運(yùn)行的一個(gè)實(shí)時(shí)應(yīng)用程序,因?yàn)楦鱾€(gè)組件間的消息流動(dòng)形成邏輯上的一個(gè)拓?fù)浣Y(jié)構(gòu)。
Spout:在一個(gè)topology中產(chǎn)生源數(shù)據(jù)流的組件。通常情況下spout會(huì)從外部數(shù)據(jù)源中讀取數(shù)據(jù),然后轉(zhuǎn)換為topology內(nèi)部的源數(shù)據(jù)。Spout是一個(gè)主動(dòng)的角色,其接口中有個(gè)nextTuple()函數(shù),storm框架會(huì)不停地調(diào)用此函數(shù),用戶只要在其中生成源數(shù)據(jù)即可。
Bolt:在一個(gè)topology中接受數(shù)據(jù)然后執(zhí)行處理的組件。Bolt可以執(zhí)行過濾、函數(shù)操作、合并、寫數(shù)據(jù)庫(kù)等任何操作。Bolt是一個(gè)被動(dòng)的角色,其接口中有個(gè)execute(Tuple input)函數(shù),在接受到消息后會(huì)調(diào)用此函數(shù),用戶可以在其中執(zhí)行自己想要的操作。
Tuple:一次消息傳遞的基本單元。本來應(yīng)該是一個(gè)key-value的map,但是由于各個(gè)組件間傳遞的tuple的字段名稱已經(jīng)事先定義好,所以tuple中只要按序填入各個(gè)value就行了,所以就是一個(gè)value list.
Stream:源源不斷傳遞的tuple就組成了stream。
Storm分組機(jī)制:
Stream Grouping定義了一個(gè)流在Bolt任務(wù)間該如何被切分。這里有Storm提供的6個(gè)Stream Grouping類型:
隨機(jī)分組(Shuffle grouping):隨機(jī)分發(fā)tuple到Bolt的任務(wù),保證每個(gè)任務(wù)獲得相等數(shù)量的tuple。
字段分組(Fields grouping):根據(jù)指定字段分割數(shù)據(jù)流,并分組;例如,根據(jù)“user-id”字段,相同“user-id”的元組總是分發(fā)到同一個(gè)任務(wù),不同“user-id”的元組可能分發(fā)到不同的任務(wù)。
全部分組(All grouping):tuple被復(fù)制到bolt的所有任務(wù),這種類型需要謹(jǐn)慎使用。
全局分組(Global grouping):全部流都分配到bolt的同一個(gè)任務(wù),明確的說,是分配給ID最新的那個(gè)task。
無分組(None grouping):你不需要關(guān)心流失如何分組。目前,無分組等效于隨機(jī)分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執(zhí)行(如果可能)。
直接分組(Direct grouping):這是一個(gè)特別的分組類型,元組生產(chǎn)者決定tuple由哪個(gè)元組處理者任務(wù)接收。
當(dāng)然還可以實(shí)現(xiàn)CustomStreamGrouping接口來定制自己需要的分組。