一
- Spark Streaming引入
新的場景需求
●集羣監控
一般的大型集羣和平臺, 都需要對其進行監控的需求。
要針對各種數據庫, 包括 MySQL, HBase 等進行監控
要針對應用進行監控, 例如 Tomcat, Nginx, Node.js 等
要針對硬件的一些指標進行監控, 例如 CPU, 內存, 磁盤 等
還有很多很多
二
- Spark Streaming介紹
●官網
http://spark.apache.org/streaming/
●概述
Spark Streaming是一個基於Spark Core之上的實時計算框架,可以從很多數據源消費數據並對數據進行實時的處理,具有高吞吐量和容錯能力強等特點。
三
●Spark Streaming的特點
1.易用
可以像編寫離線批處理一樣去編寫流式程序,支持java/scala/python語言。
2.容錯
SparkStreaming在沒有額外代碼和配置的情況下可以恢復丟失的工作。
3.易整合到Spark體系
流式處理與批處理和交互式查詢相結合。
- 實時計算所處的位置
四
- Spark Streaming原理
- 整體流程
Spark Streaming中,會有一個接收器組件Receiver,作爲一個長期運行的task跑在一個Executor上。Receiver接收外部的數據流形成input DStream
DStream會被按照時間間隔劃分成一批一批的RDD,當批處理間隔縮短到秒級時,便可以用於處理實時數據流。時間間隔的大小可以由參數指定,一般設在500毫秒到幾秒之間。
對DStream進行操作就是對RDD進行操作,計算處理的結果可以傳給外部系統。
Spark Streaming的工作流程像下面的圖所示一樣,接收到實時數據後,給數據分批次,然後傳給Spark Engine(引擎)處理最後生成該批次的結果
- 數據抽象
Spark Streaming的基礎抽象是 DStream (Discretized Stream,離散化數據流,連續不斷的數據流),代表 持續性的 輸入的數據流和經過各種Spark算子操作後 的 輸入 的結果數據流
●可以從以下多個角度深入理解DStream
1.DStream本質上就是一系列時間上連續的RDD
2.對DStream的數據的進行操作也是按照RDD爲單位來進行的
3.容錯性
底層RDD之間存在依賴關係,DStream直接也有依賴關係,RDD具有容錯性,那麼DStream也具有容錯性
如圖:每一個橢圓形表示一個RDD
橢圓形中的每個圓形代表一個RDD中的一個Partition分區
每一列的多個RDD表示一個DStream(圖中有三列所以有三個DStream)
每一行最後一個RDD則表示每一個Batch Size所產生的中間結果RDD
4.準實時性/近實時性
Spark Streaming將流式計算分解成多個Spark Job,對於每一時間段數據的處理都會經過Spark DAG圖分解以及Spark的任務集的調度過程。
對於目前版本的Spark Streaming而言,其最小的Batch Size的選取在0.5~5秒鐘之間
所以Spark Streaming能夠滿足流式準實時計算場景,對實時性要求非常高的如高頻實時交易場景則不太適合
●總結
簡單來說DStream就是對RDD的封裝,你對DStream進行操作,就是對RDD進行操作
對於DataFrame/DataSet/DStream來說本質上都可以理解成RDD
五
- DStream相關操作
- Transformations
●常見Transformation---無狀態轉換:每個批次的處理不依賴於之前批次的數據
Transformation
Meaning
map(func)
對DStream中的各個元素進行func函數操作,然後返回一個新的DStream
flatMap(func)
與map方法類似,只不過各個輸入項可以被輸出爲零個或多個輸出項
filter(func)
過濾出所有函數func返回值爲true的DStream元素並返回一個新的DStream
union(otherStream)
將源DStream和輸入參數爲otherDStream的元素合併,並返回一個新的DStream.
reduceByKey(func, [numTasks])
利用func函數對源DStream中的key進行聚合操作,然後返回新的(K,V)對構成的DStream
join(otherStream, [numTasks])
輸入爲(K,V)、(K,W)類型的DStream,返回一個新的(K,(V,W)類型的DStream
transform(func)
通過RDD-to-RDD函數作用於DStream中的各個RDD,可以是任意的RDD操作,從而返回一個新的RDD
●特殊的Transformations---有狀態轉換:當前批次的處理需要使用之前批次的數據或者中間結果。
有狀態轉換包括基於追蹤狀態變化的轉換(updateStateByKey)和滑動窗口的轉換
1.UpdateStateByKey(func)
2.Window Operations 窗口操作
- Output/Action
Output Operations可以將DStream的數據輸出到外部的數據庫或文件系統
當某個Output Operations被調用時,spark streaming程序纔會開始真正的計算過程(與RDD的Action類似)
Output Operation
Meaning
print()
打印到控制檯
saveAsTextFiles(prefix, [suffix])
保存流的內容爲文本文件,文件名爲"prefix-TIME_IN_MS[.suffix]".
saveAsObjectFiles(prefix,[suffix])
保存流的內容爲SequenceFile,文件名爲 "prefix-TIME_IN_MS[.suffix]".
saveAsHadoopFiles(prefix,[suffix])
保存流的內容爲hadoop文件,文件名爲"prefix-TIME_IN_MS[.suffix]".
foreachRDD(func)
對Dstream裏面的每個RDD執行func
- 總結
-