通過案例對SparkStreaming透徹理解三板斧之二

? ? ? ?Spark Streaming運(yùn)行時與其說是Spark Core上的一個流式處理框架,不如說是Spark Core上的一個最復(fù)雜的應(yīng)用程序。如果可以掌握Spark streaming這個復(fù)雜的應(yīng)用程序,那么其他的再復(fù)雜的應(yīng)用程序都不在話下了。

? ? ? ?我們知道Spark Core處理的每一步都是基于RDD的,RDD之間有依賴關(guān)系。上圖中的RDD的DAG顯示的是有3個Action,會觸發(fā)3個job,RDD自下向上依賴,RDD產(chǎn)生job就會具體的執(zhí)行。從DSteam Graph中可以看到,DStream的邏輯與RDD基本一致,它就是在RDD的基礎(chǔ)上加上了時間的依賴。RDD的DAG又可以叫空間維度,也就是說整個Spark Streaming多了一個時間維度,也可以成為時空維度。

? ? ? ?從這個角度來講,可以將Spark Streaming放在坐標(biāo)系中。其中Y軸就是對RDD的操作,RDD的依賴關(guān)系構(gòu)成了整個job的邏輯,而X軸就是時間。隨著時間的流逝,固定的時間間隔(Batch Interval)就會生成一個job實(shí)例,進(jìn)而在集群中運(yùn)行。

? ? ? ?對于Spark Streaming來說,當(dāng)不同的數(shù)據(jù)來源的數(shù)據(jù)流進(jìn)來的時候,基于固定的時間間隔,會形成一系列固定不變的數(shù)據(jù)集或event集合(例如來自flume和kafka)。而這正好與RDD基于固定的數(shù)據(jù)集不謀而合,事實(shí)上,由DStream基于固定的時間間隔行程的RDD Graph正是基于某一個batch的數(shù)據(jù)集的。

從上圖中可以看出,在每一個batch上,空間維度的RDD依賴關(guān)系都是一樣的,不同的是這個五個batch流入的數(shù)據(jù)規(guī)模和內(nèi)容不一樣,所以說生成的是不同的RDD依賴關(guān)系的實(shí)例,所以說RDD的Graph脫胎于DStream的Graph,也就是說DStream就是RDD的模版,不同的時間間隔,生成不同的RDD Graph實(shí)例。

從Spark Streaming本身出發(fā):

1.需要RDD DAG的生成模版:DStream Graph

2需要基于Timeline的job控制器

3需要inputStreamings和outputStreamings,代表數(shù)據(jù)的輸入和輸出

4具體的job運(yùn)行在Spark Cluster之上,由于streaming不管集群是否可以消化掉,此時系統(tǒng)容錯就至關(guān)重要

5事務(wù)處理,我們希望流進(jìn)來的數(shù)據(jù)一定會被處理,而且只處理一次。在處理出現(xiàn)崩潰的情況下如何保證Exactly once的事務(wù)語意。

從源碼解讀DStream

從這里可以看出,DStream就是Spark Streaming的核心,就想Spark Core的核心是RDD,它也有dependency和compute。更為關(guān)鍵的是下面的代碼:

? ? ? ?這是一個HashMap,以時間為key,以RDD為value,這也正應(yīng)證了隨著時間流逝,不斷的生成RDD,產(chǎn)生依賴關(guān)系的job,并通過jobScheduler在集群上運(yùn)行。再次驗(yàn)證了DStream就是RDD的模版。

? ? ? DStream可以說是邏輯級別的,RDD就是物理級別的,DStream所表達(dá)的最終都是通過RDD的轉(zhuǎn)化實(shí)現(xiàn)的。前者是更高級別的抽象,后者是底層的實(shí)現(xiàn)。DStream實(shí)際上就是在時間維度上對RDD集合的封裝,DStream與RDD的關(guān)系就是隨著時間流逝不斷的產(chǎn)生RDD,對DStream的操作就是在固定時間上操作RDD。

總結(jié):

在空間維度上的業(yè)務(wù)邏輯作用于DStream,隨著時間的流逝,每個Batch Interval形成了具體的數(shù)據(jù)集,產(chǎn)生了RDD,對RDD進(jìn)行transform操作,進(jìn)而形成了RDD的依賴關(guān)系RDD DAG,形成job。然后jobScheduler根據(jù)時間調(diào)度,基于RDD的依賴關(guān)系,把作業(yè)發(fā)布到Spark Cluster上去運(yùn)行,不斷的產(chǎn)生Spark作業(yè)。

備注:

資料來源于:DT_大數(shù)據(jù)夢工廠(Spark發(fā)行版本定制)

更多私密內(nèi)容,請關(guān)注微信公眾號:DT_Spark

如果您對大數(shù)據(jù)Spark感興趣,可以免費(fèi)聽由王家林老師每天晚上20:00開設(shè)的Spark永久免費(fèi)公開課,地址YY房間號:68917580

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容