2021年大数据Spark(三十五):SparkStreaming数据抽象 DStream
目錄
SparkStreaming數(shù)據(jù)抽象-DStream?
DStream?是什么
DStream Operations
Transformation
Output函數(shù)
SparkStreaming數(shù)據(jù)抽象-DStream?
DStream?是什么
Spark Streaming的核心是DStream,DStream類似于RDD,它實(shí)質(zhì)上一系列的RDD的集合,DStream可以按照秒、分等時(shí)間間隔將數(shù)據(jù)流進(jìn)行批量的劃分。
如下圖所示:將流式數(shù)據(jù)按照【X seconds】劃分很多批次Batch,每個(gè)Batch數(shù)據(jù)封裝到RDD中進(jìn)行處理分析,最后每批次數(shù)據(jù)進(jìn)行輸出。
?
對(duì)于目前版本的Spark Streaming而言,其最小的Batch Size的選取在0.5~5秒鐘之間,所以Spark Streaming能夠滿足流式準(zhǔn)實(shí)時(shí)計(jì)算場(chǎng)景,對(duì)實(shí)時(shí)性要求非常高的如高頻實(shí)時(shí)交易場(chǎng)景則不太適合。
?
DStream代表了一種連續(xù)的數(shù)據(jù)流,要么從某種數(shù)據(jù)源提取數(shù)據(jù),要么從其他數(shù)據(jù)流映射轉(zhuǎn)換而來(lái)。DStream內(nèi)部是由一系列連續(xù)的RDD組成的,每個(gè)RDD都包含了特定時(shí)間間隔內(nèi)的一批數(shù)據(jù),
DStream是不間斷的?連續(xù)的數(shù)據(jù)對(duì)象(內(nèi)容是無(wú)邊界的)
如下圖所示:
?
DStream本質(zhì)上是一個(gè):一系列時(shí)間上連續(xù)的RDD(Seq[RDD]),DStream = Seq[RDD]。
DStream = Seq[RDD]
?DStream相當(dāng)于一個(gè)序列(集合),里面存儲(chǔ)的數(shù)據(jù)類型為RDD(Streaming按照時(shí)間間隔劃分流式數(shù)據(jù))
對(duì)DStream的數(shù)據(jù)進(jìn)行操作也是按照RDD為單位進(jìn)行的
。
?
??通過(guò)WEB UI界面可知,對(duì)DStream調(diào)用函數(shù)操作,底層就是對(duì)RDD進(jìn)行操作,發(fā)現(xiàn)很多時(shí)候DStream中函數(shù)與RDD中函數(shù)一樣的。
?
DStream中每批次數(shù)據(jù)RDD在處理時(shí),各個(gè)RDD之間存在依賴關(guān)系,DStream直接也有依賴關(guān)系,RDD具有容錯(cuò)性,那么DStream也具有容錯(cuò)性。
?
上圖相關(guān)說(shuō)明:
?1)、每一個(gè)橢圓形表示一個(gè)RDD
?2)、橢圓形中的每個(gè)圓形代表一個(gè)RDD中的一個(gè)Partition分區(qū)
?3)、每一列的多個(gè)RDD表示一個(gè)DStream(圖中有三列所以有三個(gè)DStream)
?4)、每一行最后一個(gè)RDD則表示每一個(gè)Batch Size所產(chǎn)生的中間結(jié)果RDD
Spark Streaming將流式計(jì)算分解成多個(gè)Spark Job,對(duì)于每一時(shí)間段數(shù)據(jù)的處理都會(huì)經(jīng)過(guò)Spark DAG圖分解以及Spark的任務(wù)集的調(diào)度過(guò)程。
?
???????DStream Operations
?
?DStream#Output Operations:將DStream中每批次RDD處理結(jié)果resultRDD輸出
DStream類似RDD,里面包含很多函數(shù),進(jìn)行數(shù)據(jù)處理和輸出操作,主要分為兩大類:
???????Transformation
大多數(shù)和RDD中的類似,有一些特殊的針對(duì)特定類型應(yīng)用使用的函數(shù),比如updateStateByKey狀態(tài)函數(shù)、window窗口函數(shù)等,后續(xù)具體結(jié)合案例講解。
http://spark.apache.org/docs/2.4.5/streaming-programming-guide.html#transformations-on-dstreams
?
?
?
| Transformation | Meaning |
| map(func) | 對(duì)DStream中的各個(gè)元素進(jìn)行func函數(shù)操作,然后返回一個(gè)新的DStream |
| flatMap(func) | 與map方法類似,只不過(guò)各個(gè)輸入項(xiàng)可以被輸出為零個(gè)或多個(gè)輸出項(xiàng) |
| filter(func) | 過(guò)濾出所有函數(shù)func返回值為true的DStream元素并返回一個(gè)新的DStream |
| union(otherStream) | 將源DStream和輸入?yún)?shù)為otherDStream的元素合并,并返回一個(gè)新的DStream. |
| reduceByKey(func, [numTasks]) | 利用func函數(shù)對(duì)源DStream中的key進(jìn)行聚合操作,然后返回新的(K,V)對(duì)構(gòu)成的DStream |
| join(otherStream, [numTasks]) | 輸入為(K,V)、(K,W)類型的DStream,返回一個(gè)新的(K,(V,W)類型的DStream |
| transform(func) | 通過(guò)RDD-to-RDD函數(shù)作用于DStream中的各個(gè)RDD,可以是任意的操作,從而返回一個(gè)新的RDD |
?
???????Output函數(shù)
?????
http://spark.apache.org/docs/2.4.5/streaming-programming-guide.html#output-operations-on-dstreams
?
| Output Operation | Meaning |
| print() | 打印到控制臺(tái) |
| saveAsTextFiles(prefix, [suffix]) | 保存流的內(nèi)容為文本文件,文件名為"prefix-TIME_IN_MS[.suffix]". |
| saveAsObjectFiles(prefix,[suffix]) | 保存流的內(nèi)容為SequenceFile,文件名為 "prefix-TIME_IN_MS[.suffix]". |
| saveAsHadoopFiles(prefix,[suffix]) | 保存流的內(nèi)容為hadoop文件,文件名為"prefix-TIME_IN_MS[.suffix]". |
| foreachRDD(func) | 對(duì)Dstream里面的每個(gè)RDD執(zhí)行func |
總結(jié)
以上是生活随笔為你收集整理的2021年大数据Spark(三十五):SparkStreaming数据抽象 DStream的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2021年大数据Spark(三十三):S
- 下一篇: 2021年大数据Spark(三十六):S