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