上幾章博客已經介紹了hadoop以及它的相關生態圈內容,並且通過搜狗的階段項目完成了練習,已經初步完成了對大數據的一個入門。爲了擴展知識內容,現在開始學習storm相關的知識。
1、離線計算是什麼?
離線計算:批量獲取數據、批量傳輸數據、週期性批量計算數據、數據展示
代表技術:Sqoop批量導入數據、HDFS批量存儲數據、MapReduce批量計算數據、Hive批量計算數據、***任務調度
1,hivesql
2、調度平臺
3、Hadoop集羣運維
4、數據清洗(腳本語言)
5、元數據管理
6、數據稽查
7、數據倉庫模型架構
2、流式計算是什麼
流式計算:數據實時產生、數據實時傳輸、數據實時計算、實時展示
代表技術:Flume實時獲取數據、Kafka/metaq實時數據存儲、Storm/JStorm實時數據計算、Redis實時結果緩存、持久化存儲(mysql)。
一句話總結:將源源不斷產生的數據實時收集並實時計算,儘可能快的得到計算結果
3、離線計算與實時計算的區別
最大的區別:實時收集、實時計算、實時展示
4、Storm是什麼?
Flume實時採集,低延遲
Kafka消息隊列,低延遲
Storm實時計算,低延遲
Redis實時存儲,低延遲
Storm用來實時處理數據,特點:低延遲、高可用、分佈式、可擴展、數據不丟失。提供簡單容易理解的接口,便於開發。
海量數據?數據類型很多,產生數據的終端很多,處理數據能力增強
5、Storm與Hadoop的區別
- Storm用於實時計算,Hadoop用於離線計算。
- Storm處理的數據保存在內存中,源源不斷;Hadoop處理的數據保存在文件系統中,一批一批。
- Storm的數據通過網絡傳輸進來;Hadoop的數據保存在磁盤中。
- Storm與Hadoop的編程模型相似
Job:任務名稱
JobTracker:項目經理
TaskTracker:開發組長、產品經理
Child:負責開發的人員
Mapper/Reduce:開發人員中的兩種角色,一種是服務器開發、一種是客戶端開發
Topology:任務名稱
Nimbus:項目經理
Supervisor:開組長、產品經理
Worker:開人員
Spout/Bolt:開人員中的兩種角色,一種是服務器開發、一種是客戶端開發
6、Storm應用場景及行業案例
Storm用來實時計算源源不斷產生的數據,如同流水線生產。
6.1、運用場景
- 日誌分析
從海量日誌中分析出特定的數據,並將分析的結果存入外部存儲器用來輔佐決策。
- 管道系統
將一個數據從一個系統傳輸到另外一個系統,比如將數據庫同步到Hadoop
- 消息轉化器
將接受到的消息按照某種格式進行轉化,存儲到另外一個系統如消息中間件
6.2、典型案列
- 一淘-實時分析系統:實時分析用戶的屬性,並反饋給搜索引擎
最初,用戶屬性分析是通過每天在雲梯上定時運行的MR job來完成的。爲了滿足實時性的要求,希望能夠實時分析用戶的行爲日誌,將最新的用戶屬性反饋給搜索引擎,能夠爲用戶展現最貼近其當前需求的結果。
- 攜程-網站性能監控:實時分析系統監控攜程網的網站性能
利用HTML5提供的performance標準獲得可用的指標,並記錄日誌。Storm集羣實時分析日誌和入庫。使用DRPC聚合成報表,通過歷史數據對比等判斷規則,觸發預警事件。
- 阿里媽媽-用戶畫像:實時計算用戶的興趣數據
爲了更加精準投放廣告,阿里媽媽後臺計算引擎需要維護每個用戶的興趣點(理想狀態是,你對什麼感興趣,就向你投放哪類廣告)。用戶興趣主要基於用戶的歷史行爲、用戶的實時查詢、用戶的實時點擊、用戶的地理信息而得,其中實時查詢、實時點擊等用戶行爲都是實時數據。考慮到系統的實時性,阿里媽媽使用Storm維護用戶興趣數據,並在此基礎上進行受衆定向的廣告投放。
7、Storm核心組件(重要)
- Nimbus:負責資源分配和任務調度。
- Supervisor:負責接受nimbus分配的任務,啓動和停止屬於自己管理的worker進程。—通過配置文件設置當前supervisor上啓動多少個worker。
- Worker:運行具體處理組件邏輯的進程。Worker運行的任務類型只有兩種,一種是Spout任務,一種是Bolt任務。
- Task:worker中每一個spout/bolt的線程稱爲一個task. 在storm0.8之後,task不再與物理線程對應,不同spout/bolt的task可能會共享一個物理線程,該線程稱爲executor。
8、Storm編程模型(重要)
- Topology:Storm中運行的一個實時應用程序的名稱。(拓撲)
- Spout:在一個topology中獲取源數據流的組件。
通常情況下spout會從外部數據源中讀取數據,然後轉換爲topology內部的源數據。
- Bolt:接受數據然後執行處理的組件,用戶可以在其中執行自己想要的操作。
- Tuple:一次消息傳遞的基本單元,理解爲一組消息就是一個Tuple。
- Stream:表示數據的流向。
北京地鐵線路
storm對比地鐵
總框架模型
9、流式計算一般架構圖(重要)
- 其中flume用來獲取數據。
- Kafka用來臨時保存數據。
- Strom用來計算數據。
- Redis是個內存數據庫,用來保存數據。