大數據基礎-Storm基礎(一)

1、流式計算是什麼

         流式計算:數據實時產生、數據實時傳輸、數據實時計算、實時展示

         代表技術:Flume實時獲取數據、Kafka/metaq實時數據存儲、Storm/JStorm實時數據計算、Redis實時結果緩存、持久化存儲(mysql)。

         一句話總結:將源源不斷產生的數據實時收集並實時計算,儘可能快的得到計算結果

2、離線計算與實時計算的區別

         最大的區別:實時收集、實時計算、實時展示

3、Storm是什麼?

          Storm用實時處理數據,特點:低延遲、高可用、分佈式、可擴展、數據不丟失。提供簡單容易理解的接口,便於開發。

4、Storm與Hadoop的區別

  1. Storm用於實時計算,Hadoop用於離線計算。
  2. Storm處理的數據保存在內存中,源源不斷;Hadoop處理的數據保存在文件系統中,一批一批。
  3. Storm的數據通過網絡傳輸進來;Hadoop的數據保存在磁盤中。
  4. Storm與Hadoop的編程模型相似

5、Storm應用場景及行業案例

      Storm用來實時計算源源不斷產生的數據,如同流水線生產。運用場景

日誌分析

海量日誌中分析出特定的數據,並將分析的結果存入外部存儲器用來輔佐決策。

管道系統

將一個數據從一個系統傳輸到另外一個系統,比如將數據庫同步到Hadoop

消息轉化器

將接受到的消息按照某種格式進行轉化,存儲到另外一個系統如消息中間件

6、Storm核心組件(重要)

  1. Nimbus:負責資源分配和任務調度。
  2. Supervisor:負責接受nimbus分配的任務,啓動和停止屬於自己管理的worker進程。---通過配置文件設置當前supervisor上啓動多少個worker
  3. Worker:運行具體處理組件邏輯的進程。Worker運行的任務類型只有兩種,一種是Spout任務,一種是Bolt任務。
  4. Task:worker中每一個spout/bolt的線程稱爲一個task. 在storm0.8之後,task不再與物理線程對應,不同spout/bolt的task可能會共享一個物理線程,該線程稱爲executor。

7、Storm編程模型(重要)

 

  1. 組件

  2. Topology:Storm中運行的一個實時應用程序,因爲各個組件間的消息流動形成邏輯上的一個拓撲結構。

    Spout:在一個topology中產生源數據流的組件。通常情況下spout會從外部數據源中讀取數據,然後轉換爲topology內部的源數據。Spout是一個主動的角色,其接口中有個nextTuple()函數,storm框架會不停地調用此函數,用戶只要在其中生成源數據即可。

    Bolt:在一個topology中接受數據然後執行處理的組件。Bolt可以執行過濾、函數操作、合併、寫數據庫等任何操作。Bolt是一個被動的角色,其接口中有個execute(Tuple input)函數,在接受到消息後會調用此函數,用戶可以在其中執行自己想要的操作。

    Tuple:一次消息傳遞的基本單元。本來應該是一個key-value的map,但是由於各個組件間傳遞的tuple的字段名稱已經事先定義好,所以tuple中只要按序填入各個value就行了,所以就是一個value list.

    Stream:源源不斷傳遞的tuple就組成了stream。

Stream grouping:

Stream grouping:即消息的partition方法。

Stream Grouping定義了一個流在Bolt任務間該如何被切分。這裏有Storm提供的6個Stream Grouping類型:

1. 隨機分組(Shuffle grouping):隨機分發tuple到Bolt的任務,保證每個任務獲得相等數量的tuple。

2. 字段分組(Fields grouping):根據指定字段分割數據流,並分組。例如,根據“user-id”字段,相同“user-id”的元組總是分發到同一個任務,不同“user-id”的元組可能分發到不同的任務。

3. 全部分組(All grouping):tuple被複制到bolt的所有任務。這種類型需要謹慎使用。

4. 全局分組(Global grouping):全部流都分配到bolt的同一個任務。明確地說,是分配給ID最小的那個task。

5. 無分組(None grouping):你不需要關心流是如何分組。目前,無分組等效於隨機分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執行(如果可能)。

6. 直接分組(Direct grouping):這是一個特別的分組類型。元組生產者決定tuple由哪個元組處理者任務接收。

8、流式計算一般架構圖(重要)

 

  1. 其中flume用來獲取數據。
  2. Kafka用來臨時保存數據。
  3. Strom用來計算數據。
  4. Redis是個內存數據庫,用來保存數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章