1.Storm概述簡介


主要目標:

  1. 離線計算是什么?

  2. 流式計算是什么?

  3. 流式計算與離線計算的區別?

  4. Storm是什么?

  5. Storm與Hadoop的區別?

  6. Storm的應用場景及行業案例

  7. Storm的核心組件(重點)

  8. Storm的編程模型(重點)

  9. 流式計算的一般架構圖(重點)

1.流式計算與Storm概述(背景):

  根據業務需求,數據的處理可以分為離線處理和實時(流式)處理,在離線處理方面Hadoop提供了很好的解決方案,Hadoop不僅可以用

來存儲海量數據,還以用來計算海量數據。因為其高吞吐、高可靠等特點,很多互聯網公司都已經使用Hadoop來構建數據倉庫,高頻使用

並促進了Hadoop生態圈的各項技術的發展.但是針對海量數據的實時處理卻一直沒有比較好的解決方案,Storm橫空出世,與生俱來的分布式

、高可靠、高吞吐的特性,橫掃市面上的一些流式計算框架,漸漸的成為了流式計算的首選框架;

  2013年,阿里巴巴開源了基於storm的設計思路使用java重現編寫的流式計算框架JStorm JStorm 是一個類似Hadoop MapReduce的系
統, 用戶按照指定的接口實現一個任務,然后將這個任務遞交給JStorm系統,Jstorm將這個任務跑起來,並且按7 * 24小時運行起來,一
旦中間一個Worker 發生意外故障, 調度器立即分配一個新的Worker替換這個失效的Worker。因此,從應用的角度,JStorm 應用是一種遵
守某種編程規范的分布式應用。從系統角度, JStorm是一套類似MapReduce的調度系統。 從數據的角度, 是一套基於流水線的消息處理機
制;鑒於大多數企業的生產環境還在使用storm,我們學習的目標還是切換到Apache基金會的storm上來。
2.Storm用來解決什么樣的問題(背景):
  信息的時效(實時)性  
  舉個搜索場景中的例子,當一個賣家發布了一條寶貝信息時,他希望的當然是這個寶貝馬上就可以被賣家搜索出來、點擊、購買啦,相反,如果這個寶貝要等到第二天或者更久才可以被搜出來,估計這個大哥就要罵娘了;

3.離線計算是什么?

  離線計算:批量獲取數據、批量傳輸數據、周期性批量計算數據、數據展示

  代表技術:Sqoop批量導入數據、HDFS批量存儲數據、MapReduce批量計算數據、Hive批量計算數據、批量計算任務調度

  相關崗位日常業務:
    1,hivesql
    2、調度平台
    3、Hadoop集群運維
    4、數據清洗(腳本語言)
    5、元數據管理
    6、數據稽查
    7、數據倉庫模型架構

4.流式計算是什么?

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

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

  一句話總結:將源源不斷產生的數據實時收集並實時計算,盡可能快(依賴外部系統)的得到計算結果

  所以:離線計算和實時計算的最大區別在於:實時計算是:實時收集、實時計算、實時展示的

5.Storm是什么?

  Flume實時采集,低延遲

  Kafka消息隊列,低延遲

  Storm實時計算,低延遲

  Redis實時存儲,低延遲

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

6.Storm的應用場景及其行業案例:

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

6.1:應用場景:

  Storm處理數據的方式是基於消息的流水線處理, 因此特別適合無狀態計算,也就是計算單元的依賴的數據全部在接受的消息
中可以找到, 並且最好一個數據流不依賴另外一個數據流。因此,常常用於
    - 日志分析,從海量日志中分析出特定的數據,並將分析的結果存入外部存儲器用來輔佐決策。
    - 管道系統, 將一個數據從一個系統傳輸到另外一個系統, 比如將數據庫同步到Hadoop
    - 消息轉化器, 將接受到的消息按照某種格式進行轉化,存儲到另外一個系統如消息中間件
    - 統計分析器,從日志或消息中,提煉出某個字段,然后做count或sum計算,最后將統計值存入外部存儲器。中間處理過程可
能更復雜
6.2:典型案例:   
  案列1:一淘-實時分析系統,實時分析用戶的屬性,反饋給搜索引擎
        一淘-實時分析系統:實時分析用戶的屬性,並反饋給搜索引擎。最初,用戶屬性分析是通過每天在雲梯上定時運行的MR job來完成的。為滿足實時性的要求,希望能夠實時分析用戶的行為日志,將最新的用戶屬性反饋給搜索引擎,能夠為用戶展現最貼近其當前需求的結果
  案列2:實時分析系統監控攜程網的網站性能
        攜程-網站性能監控:實時分析系統監控攜程網的網站性能。利用HTML5提供的performance標准獲得可用的指標,並記錄日志。Storm集群實時分析日志和入庫。使用DRPC聚合成報表,通過歷史數據對比等判斷規則,觸發預警事件。
  案列3:游戲實時運營
        一個游戲新版本上線,有一個實時分析系統,收集游戲中的數據,運營或者開發者可以在上線后幾秒鍾得到持續不斷更新的游戲監控報告和分析結果,然后馬上針對游戲的參數 和平衡性進行調整。這樣就能夠大大縮短游戲迭代周期,加強游戲的生命力
  案列4:實時計算在騰訊的運用
        實時計算在騰訊的運用:精准推薦(廣點通廣告推薦、新聞推薦、視頻推薦、游戲道具推薦);實時分析(微信運營數據門戶、效果統計、訂單畫像分析);實時監控(實時監控平台、游戲內接口調用)
  案列5:阿里媽媽--用戶畫像,實時計算用戶的興趣數據
        為了更加精准投放廣告,阿里媽媽后台計算引擎需要維護每個用戶的興趣點(理想狀態是,你對什么感興趣,就向你投放哪類廣告)用戶興趣主要基於用戶的歷史行為、用戶的實時查詢、用戶的實時點擊、用戶的地理信息而得,其中實時查詢、實時點擊等用戶行為都是實時數據。考慮到系統的實時性,阿里媽媽使用Storm維護用戶興趣數據,並在此基礎上進行受眾定向的廣告投放。

7.Storm和Hadoop的區別   

   Storm用於實時計算,Hadoop是面向基於內存流轉的離線計算。

  Storm處理的數據保存在內存中,源源不斷;Hadoop處理的數據保存在文件系統中,一批一批(數據存儲的介質不同)

  Storm的數據通過網絡傳輸進來;Hadoop的數據保存在磁盤中。(Hadoop是磁盤級計算,進行計算時,數據在磁盤上,需要讀寫

磁盤;Storm是內存級計算,數據直接通過網絡導入內存。讀寫內存比讀寫磁盤速度快n個數量級)

  Storm與Hadoop的架構一樣,編程模型相似

  

8.Storm的核心組件(重點):

  

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

9.Storm的編程模型(重點):

       

  各個組件說明:

  1.DataSource:外部數據源

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

  3.Spout在一個Topology中獲取源數據流的組件,通常情況下spout會從外部數據源中讀取數據,然后轉換為Storm內部的源數據

以Tuple為基本的傳輸單元下發給Bolt,Spout是一個主動的角色,其接口中有個nextTuple()函數,storm框架會不停地調用此函數,用戶

只要在其中生成源數據即可

  4.Bolt:在一個Topology中接收數據然后執行處理的組件,Bolt可以執行過濾、函數操作、合並、寫數據庫等任何操作。Bolt是一個

被動的角色,其接口中有個execute(Tuple input)函數,在接受到消息后會調用此函數,用戶可以在其中執行自己想要的操作。

  5.Tuple:一次消息傳遞的基本單元。本來應該是一個key-value的map,但是由於各個組件間傳遞的tuple的字段名稱已經事先定義好,

所以tuple中只要按序填入各個value就行了,所以就是一個value list.

  6.Stream grouping:即消息的partition方法。Storm中提供若干種實用的grouping方式,包括shuffle, fields hash, all, global,

none, direct和localOrShuffle等,Stream Grouping定義了一個流在Bolt任務間該如何被切分。

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

  這里有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由哪個元組處理者任務接收。

10.Storm流向整體結構圖(重點):

  

其中flume用來獲取數據。Kafka用來臨時保存數據。Strom用來計算數據。Redis是個內存數據庫,用來保存數據。

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM