1.2 特性
- Storm是一個分布式實時流式計算平臺。主要特性如下:
- 簡單的編程模型:類似于MapReduce降低了并行批處理復(fù)雜性,Storm降低了實時處理的復(fù)雜性,只需實現(xiàn)幾個接口即可(Spout實現(xiàn)ISpout接口,Bolt實現(xiàn)IBolt接口)。
- 支持多種語言:你可以在Storm之上使用各種編程語言。默認支持Clojure、Java、Ruby和Python。要增加對其他語言的支持,只需實現(xiàn)一個簡單的Storm通信協(xié)議即可。
- 容錯性:nimbus、supervisor都是無狀態(tài)的, 可以用kill -9來殺死Nimbus和Supervisor進程, 然后再重啟它們,任務(wù)照常進行; 當(dāng)worker失敗后, supervisor會嘗試在本機重啟它。
- 分布式:計算是在多個線程、進程和服務(wù)器之間并行進行的。
- 持久性、可靠性:消息被持久化到本地磁盤,并且支持數(shù)據(jù)備份防止數(shù)據(jù)丟失。
- 可靠的消息處理:Storm保證每個消息至少能得到一次完整處理。任務(wù)失敗時,它會負責(zé)從消息源重試消息(ack機制)。
- 快速、實時:Storm保證每個消息能能得到快速的處理。
1.3 與常用其他大數(shù)據(jù)計算平臺對比
-
Storm vs. MapReduce Storm的一個拓撲常駐內(nèi)存運行,MR作業(yè)運行完了進行就被kill了;storm是流式處理,MR是批處理;Storm數(shù)據(jù)在內(nèi)存中不寫磁盤,而MR會與磁盤進行交互;Storm的DAG(有向無環(huán)圖)模型可以組合多個階段,而MR只可以有MAP和REDUCE兩個階段。
?
2. Storm的核心組件
2.1 拓撲結(jié)構(gòu)
-
topology 是storm中運行的一個實時應(yīng)用程序的名稱(拓撲),因為各個組件間的消息流動而形成邏輯上的拓撲結(jié)構(gòu)。
-
Strom在運行中可分為spout與bolt兩個組件,其中,數(shù)據(jù)源從spout開始,數(shù)據(jù)以tuple的方式發(fā)送到bolt,多個bolt可以串連起來,一個bolt也可以接入多個spot/bolt。運行時Topology如下圖:
?
2.2 編程模型的一些基本概念
2.2.1 Tuple
- stream 表示數(shù)據(jù)的流向,流式Storm的核心抽象。一個流是一個無界Tuple序列,Tuple可以包含整性、長整型、短整型、字節(jié)、字符、雙精度數(shù)、浮點數(shù)、布爾值和字節(jié)數(shù)組。用戶可以通過定義序列化器,在本機Tuple使用自定義類型;
2.2.2 Spout組件
-
spout 在一個topology中獲取源數(shù)據(jù)流的組件,通常情況下spout會從外部數(shù)據(jù)源讀取數(shù)據(jù),然后轉(zhuǎn)換為topology內(nèi)部的源數(shù)據(jù);
2.2.3 Bolt組件
-
bolt 接收數(shù)據(jù),然后執(zhí)行處理的組件,用戶可以其中執(zhí)行自己想要的操作(Bolt可以完成過濾、業(yè)務(wù)處理、連接運算、連接訪問數(shù)據(jù)庫等業(yè)務(wù)
- 核心方法
-
prepare:初始化
execute:處理一個tuple暑假,tuple對象中包含了元數(shù)據(jù)信息
cleanup:shutdown之前的資源清理操作stream grouping(流分組) 流分組是拓撲定義的一部分,為每個Bolt指定應(yīng)該接收哪個流作為輸入。在bolt的任務(wù)中定義流應(yīng)該如何分區(qū),Storm有7個內(nèi)置的流分組接口(隨機分組(Shuffle grouping)、字段分組(Fields grouping)、全部分組(All grouping)、全局分組(Global grouping)、無分組(None grouping)、直接分組(Direct grouping)、本地或隨機分組(Local or shuffle grouping))
2.2.4 Stream grouping組件
-
stream grouping(流分組) 流分組是拓撲定義的一部分,為每個Bolt指定應(yīng)該接收哪個流作為輸入。在bolt的任務(wù)中定義流應(yīng)該如何分區(qū),Storm有7個內(nèi)置的流分組接口(隨機分組(Shuffle grouping)、字段分組(Fields grouping)、全部分組(All grouping)、全局分組(Global grouping)、無分組(None grouping)、直接分組(Direct grouping)、本地或隨機分組(Local or shuffle grouping))
?