主要目標:
1. 離線計算是什么?
2. 流式計算是什么?
3. 流式計算與離線計算的區別?
4. Storm是什么?
5. Storm與Hadoop的區別?
6. Storm的應用場景及行業案例
7. Storm的核心組件(重點)
8. Storm的編程模型(重點)
9. 流式計算的一般架構圖(重點)
1.流式計算與Storm概述(背景):
根據業務需求,數據的處理可以分為離線處理和實時(流式)處理,在離線處理方面Hadoop提供了很好的解決方案,Hadoop不僅可以用
來存儲海量數據,還以用來計算海量數據。因為其高吞吐、高可靠等特點,很多互聯網公司都已經使用Hadoop來構建數據倉庫,高頻使用
並促進了Hadoop生態圈的各項技術的發展.但是針對海量數據的實時處理卻一直沒有比較好的解決方案,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:應用場景:
7.Storm和Hadoop的區別:
Storm用於實時計算,Hadoop是面向基於內存流轉的離線計算。
Storm處理的數據保存在內存中,源源不斷;Hadoop處理的數據保存在文件系統中,一批一批(數據存儲的介質不同)
Storm的數據通過網絡傳輸進來;Hadoop的數據保存在磁盤中。(Hadoop是磁盤級計算,進行計算時,數據在磁盤上,需要讀寫
磁盤;Storm是內存級計算,數據直接通過網絡導入內存。讀寫內存比讀寫磁盤速度快n個數量級)
Storm與Hadoop的架構一樣,編程模型相似
8.Storm的核心組件(重點):
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。
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流向整體結構圖(重點):