SparkStreaming 介紹

一 

  • 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體系

流式處理與批處理和交互式查詢相結合。

  1. 實時計算所處的位置
  2.                                           

 

  • Spark Streaming原理
  1.  整體流程

Spark Streaming中,會有一個接收器組件Receiver,作爲一個長期運行的task跑在一個Executor上。Receiver接收外部的數據流形成input DStream

 

DStream會被按照時間間隔劃分成一批一批的RDD,當批處理間隔縮短到秒級時,便可以用於處理實時數據流。時間間隔的大小可以由參數指定,一般設在500毫秒到幾秒之間

對DStream進行操作就是對RDD進行操作,計算處理的結果可以傳給外部系統。

Spark Streaming的工作流程像下面的圖所示一樣,接到實時數據後,給數據分批次,然後傳給Spark Engine(引擎)處理最後生成該批次的結果

  1. 數據抽象

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相關操作

      1.  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 窗口操作

 

      1.  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

  1. 總結
  2. ​​​​​​​
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章