通過案例對SparkStreaming透徹理解三板斧之二 - 簡書
http://www.reibang.com/p/c59fa2ad7380
DStream就是Spark Streaming的核心您没,就想Spark Core的核心是RDD悲关,它也有dependency和compute。
一個HashMap忽媒,以時間為key,以RDD為value腋粥,這也正應(yīng)證了隨著時間流逝晦雨,不斷的生成RDD,產(chǎn)生依賴關(guān)系的job隘冲,并通過jobScheduler在集群上運行闹瞧。再次驗證了DStream就是RDD的模版。
DStream可以說是邏輯級別的展辞,RDD就是物理級別的奥邮,DStream所表達的最終都是通過RDD的轉(zhuǎn)化實現(xiàn)的。前者是更高級別的抽象罗珍,后者是底層的實現(xiàn)洽腺。DStream實際上就是在時間維度上對RDD集合的封裝,DStream與RDD的關(guān)系就是隨著時間流逝不斷的產(chǎn)生RDD靡砌,對DStream的操作就是在固定時間上操作RDD已脓。
Spark Streaming運行時與其說是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放在坐標系中轿塔。其中Y軸就是對RDD的操作特愿,RDD的依賴關(guān)系構(gòu)成了整個job的邏輯,而X軸就是時間勾缭。隨著時間的流逝揍障,固定的時間間隔(Batch Interval)就會生成一個job實例,進而在集群中運行俩由。
對于Spark Streaming來說毒嫡,當不同的數(shù)據(jù)來源的數(shù)據(jù)流進來的時候,基于固定的時間間隔采驻,會形成一系列固定不變的數(shù)據(jù)集或event集合(例如來自flume和kafka)审胚。而這正好與RDD基于固定的數(shù)據(jù)集不謀而合,事實上礼旅,由DStream基于固定的時間間隔行程的RDD Graph正是基于某一個batch的數(shù)據(jù)集的。
從上圖中可以看出洽洁,在每一個batch上痘系,空間維度的RDD依賴關(guān)系都是一樣的,不同的是這個五個batch流入的數(shù)據(jù)規(guī)模和內(nèi)容不一樣饿自,所以說生成的是不同的RDD依賴關(guān)系的實例汰翠,所以說RDD的Graph脫胎于DStream的Graph,也就是說DStream就是RDD的模版昭雌,不同的時間間隔复唤,生成不同的RDD Graph實例。
從Spark Streaming本身出發(fā):
1.需要RDD DAG的生成模版:DStream Graph
2需要基于Timeline的job控制器
3需要inputStreamings和outputStreamings烛卧,代表數(shù)據(jù)的輸入和輸出
4具體的job運行在Spark Cluster之上佛纫,由于streaming不管集群是否可以消化掉,此時系統(tǒng)容錯就至關(guān)重要
5事務(wù)處理总放,我們希望流進來的數(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在集群上運行驼侠。再次驗證了DStream就是RDD的模版。
DStream可以說是邏輯級別的谆吴,RDD就是物理級別的倒源,DStream所表達的最終都是通過RDD的轉(zhuǎn)化實現(xiàn)的。前者是更高級別的抽象句狼,后者是底層的實現(xiàn)笋熬。DStream實際上就是在時間維度上對RDD集合的封裝,DStream與RDD的關(guān)系就是隨著時間流逝不斷的產(chǎn)生RDD腻菇,對DStream的操作就是在固定時間上操作RDD胳螟。
總結(jié):
在空間維度上的業(yè)務(wù)邏輯作用于DStream,隨著時間的流逝筹吐,每個Batch Interval形成了具體的數(shù)據(jù)集糖耸,產(chǎn)生了RDD,對RDD進行transform操作丘薛,進而形成了RDD的依賴關(guān)系RDD DAG嘉竟,形成job。然后jobScheduler根據(jù)時間調(diào)度洋侨,基于RDD的依賴關(guān)系舍扰,把作業(yè)發(fā)布到Spark Cluster上去運行,不斷的產(chǎn)生Spark作業(yè)希坚。
備注:
資料來源于:DT_大數(shù)據(jù)夢工廠(Spark發(fā)行版本定制)
更多私密內(nèi)容边苹,請關(guān)注微信公眾號:DT_Spark
如果您對大數(shù)據(jù)Spark感興趣,可以免費聽由王家林老師每天晚上20:00開設(shè)的Spark永久免費公開課裁僧,地址YY房間號:68917580
文/陽光男孩spark(簡書作者)原文鏈接:http://www.reibang.com/p/c59fa2ad7380著作權(quán)歸作者所有个束,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標注“簡書作者”锅知。