2021年大数据Spark(三十五):SparkStreaming数据抽象 DStream
目錄
SparkStreaming數據抽象-DStream?
DStream?是什么
DStream Operations
Transformation
Output函數
SparkStreaming數據抽象-DStream?
DStream?是什么
Spark Streaming的核心是DStream,DStream類似于RDD,它實質上一系列的RDD的集合,DStream可以按照秒、分等時間間隔將數據流進行批量的劃分。
如下圖所示:將流式數據按照【X seconds】劃分很多批次Batch,每個Batch數據封裝到RDD中進行處理分析,最后每批次數據進行輸出。
?
對于目前版本的Spark Streaming而言,其最小的Batch Size的選取在0.5~5秒鐘之間,所以Spark Streaming能夠滿足流式準實時計算場景,對實時性要求非常高的如高頻實時交易場景則不太適合。
?
DStream代表了一種連續的數據流,要么從某種數據源提取數據,要么從其他數據流映射轉換而來。DStream內部是由一系列連續的RDD組成的,每個RDD都包含了特定時間間隔內的一批數據,
DStream是不間斷的?連續的數據對象(內容是無邊界的)
如下圖所示:
?
DStream本質上是一個:一系列時間上連續的RDD(Seq[RDD]),DStream = Seq[RDD]。
DStream = Seq[RDD]
?DStream相當于一個序列(集合),里面存儲的數據類型為RDD(Streaming按照時間間隔劃分流式數據)
對DStream的數據進行操作也是按照RDD為單位進行的
。
?
??通過WEB UI界面可知,對DStream調用函數操作,底層就是對RDD進行操作,發現很多時候DStream中函數與RDD中函數一樣的。
?
DStream中每批次數據RDD在處理時,各個RDD之間存在依賴關系,DStream直接也有依賴關系,RDD具有容錯性,那么DStream也具有容錯性。
?
上圖相關說明:
?1)、每一個橢圓形表示一個RDD
?2)、橢圓形中的每個圓形代表一個RDD中的一個Partition分區
?3)、每一列的多個RDD表示一個DStream(圖中有三列所以有三個DStream)
?4)、每一行最后一個RDD則表示每一個Batch Size所產生的中間結果RDD
Spark Streaming將流式計算分解成多個Spark Job,對于每一時間段數據的處理都會經過Spark DAG圖分解以及Spark的任務集的調度過程。
?
???????DStream Operations
?
?DStream#Output Operations:將DStream中每批次RDD處理結果resultRDD輸出
DStream類似RDD,里面包含很多函數,進行數據處理和輸出操作,主要分為兩大類:
???????Transformation
大多數和RDD中的類似,有一些特殊的針對特定類型應用使用的函數,比如updateStateByKey狀態函數、window窗口函數等,后續具體結合案例講解。
http://spark.apache.org/docs/2.4.5/streaming-programming-guide.html#transformations-on-dstreams
?
?
?
| 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 |
?
???????Output函數
?????
http://spark.apache.org/docs/2.4.5/streaming-programming-guide.html#output-operations-on-dstreams
?
| 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 |
總結
以上是生活随笔為你收集整理的2021年大数据Spark(三十五):SparkStreaming数据抽象 DStream的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Spark(三十三):S
- 下一篇: 2021年大数据Spark(三十六):S