流式計算--storm1(storm概念初識)
1.Storm是什麼?
Storm用來實時處理資料,特點:低延遲、高可用、分散式、可擴充套件、資料不丟失。提供簡單容易理解的介面,便於開發。
2.Storm與Hadoop的區別?
- Storm用於實時計算,Hadoop用於離線計算。
- Storm處理的資料儲存在記憶體中,源源不斷;Hadoop處理的資料儲存在檔案系統中,一批一批。
- Storm的資料通過網路傳輸進來;Hadoop的資料儲存在磁碟中。
- Storm與Hadoop的程式設計模型相似
3.Storm核心元件
Nimbus:負責分配任務,任務排程,對任務進行監控
Supervisor:當前物理機上的管理者,接受Nimbus分配的任務,啟動和停止屬於自己管理的worker程序。通過配置檔案可以設定當 前supervisor啟動多少個worker.
Worker:執行具體任務的組建,任務有兩種兩型別,一種是Spout任務,一種是Bolt任務。一個worker中可同時存在多個Spout任務和 多個Bolt任務。
Task:worker中每一個Spout或者Bolt的執行緒稱為一個task,在storm0.8之後,task不再與物理執行緒對應,不同spout/bolt的task可能會共 享一個物理執行緒,該執行緒稱為executor。預設情況下executor=thread=task
4.Storm程式設計模型(Mr.Mao的圖)
Topology:Storm中執行的一個實時應用程式的名稱。
Spout:在一個topology中獲取源資料流的元件,通常情況下spout會從外部資料來源中讀取資料,然後轉換為topology內部的源 資料。接受外部資料來源的元件,將外部資料來源轉化成Storm內部的資料,以Tuple為基本的傳輸單元下發給Bolt
Bolt: 接受Spout傳送的資料,或上游的bolt的傳送的資料。根據業務邏輯進行處理。傳送給下一個Bolt或者是儲存到某種介 質 上。介質可以是Redis可以是mysql,或者其他。
Tuple:一次訊息傳遞的基本單元,理解為一組訊息就是一個Tuple。Storm內部中資料傳輸的基本單元,裡面封裝了一個List 物件,用來儲存資料。
StreamGrouping:資料分組策略,7種:shuffleGrouping(Random函式),Non Grouping(Random函式),FieldGrouping(Hash取 模)、Local or ShuffleGrouping 本地或隨機,優先本地
Worker與topology:一個worker只屬於一個topology,每個worker中執行的task只能屬於這個topology。 反之,一個topology 包含多個worker,其實就是這個topology執行在多個worker上。
一個topology要求的worker數量如果不被滿足,叢集在任務分配時,根據現有的worker先執行topology。 如果當前叢集中worker數量為0,那麼最新提交的topology將只會被標識active,不會執行,只有當叢集有 了空閒資源之後,才會被執行。
5.流式計算一般架構圖
(下面會一步一步實現這個流程敬請期待。。。)
- 其中flume用來獲取資料。
- Kafka用來臨時儲存資料。
- Strom用來計算資料。
- Redis是個記憶體資料庫,用來儲存資料。