1. 程式人生 > >流式計算--storm1(storm概念初識)

流式計算--storm1(storm概念初識)

1.Storm是什麼?

     Storm用實時處理資料,特點:低延遲、高可用、分散式、可擴充套件、資料不丟失。提供簡單容易理解的介面,便於開發。

2.Storm與Hadoop的區別?

  1. Storm用於實時計算,Hadoop用於離線計算。
  2. Storm處理的資料儲存在記憶體中,源源不斷;Hadoop處理的資料儲存在檔案系統中,一批一批。
  3. Storm的資料通過網路傳輸進來;Hadoop的資料儲存在磁碟中。
  4. 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.流式計算一般架構圖

         (下面會一步一步實現這個流程敬請期待。。。)

          

  1. 其中flume用來獲取資料。
  2. Kafka用來臨時儲存資料。
  3. Strom用來計算資料。
  4. Redis是個記憶體資料庫,用來儲存資料。