您好,登錄后才能下訂單哦!
怎么解密SparkStreaming運行機(jī)制,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
一:spark各個子框架的關(guān)系:
上節(jié)課我們采用了降維的方式查看了整個spark streaming的大概運行的過程,再次強(qiáng)調(diào),spark streaming 其實是構(gòu)建在spark core之上的一個應(yīng)用程序,如果要構(gòu)建一個強(qiáng)大的spark應(yīng)用程序 ,spark streaming 是一個值得借鑒的參考,spark streaming涉及多個job交叉配合,里面涉及到了spark的所有的核心組件,如果對spark streaming 精通了的話,可以說就精通了整個spark,所以精通掌握spark streaming是至關(guān)重要的
spark 的各個子框架都是基于spark core的。spark streaming在內(nèi)部的處理機(jī)制是接受實時流的數(shù)據(jù),并根據(jù)一定的時間間隔分成一批一批的數(shù)據(jù),然后通過spark engine處理這些批數(shù)據(jù),最后得到處理后的一批一批的數(shù)據(jù)。
對應(yīng)的批數(shù)據(jù),在spark內(nèi)核對應(yīng)RDD,在spark streaming中對應(yīng)DStream ,一個DStream相當(dāng)于RDD的模板,對應(yīng)一組RDD(RDD的一個序列)
通俗點理解的話,在數(shù)據(jù)分成一批一批后,通過一個隊列,然后spark引擎從該隊列中依次一個一個的取出批數(shù)據(jù),把批數(shù)據(jù)封裝成一個DStream,因為DStream是RDD的模板,是RDD的一個邏輯級別的抽象,所以實質(zhì)上是把數(shù)據(jù)封裝成為物理級別的RDD.
二:Spark Streaming基礎(chǔ)概念理解:
為了更好的理解spark streaming,我們先簡單的對相關(guān)概念理解一下
1 離散流:(Discretized Stream ,DStream):這是spark streaming對內(nèi)部的持續(xù)的實時數(shù)據(jù)流的抽象描述,也即我們處理的一個實時數(shù)據(jù)流,在spark streaming中對應(yīng)一個DStream
2 批數(shù)據(jù):將實時流時間以時間為單位進(jìn)行分批,將數(shù)據(jù)處理轉(zhuǎn)化為時間片數(shù)據(jù)的批處理
3 時間片或者批處理時間間隔:邏輯級別的對數(shù)據(jù)進(jìn)行定量的標(biāo)準(zhǔn),以時間片作為拆分流數(shù)據(jù)的依據(jù)。
4 窗口長度:一個窗口覆蓋的流數(shù)據(jù)的時間長度。比如說要每隔5分鐘統(tǒng)計過去30分鐘的數(shù)據(jù),窗口長度為6,因為30分鐘是batch interval 的6倍
5 滑動時間間隔:比如說要每隔5分鐘統(tǒng)計過去30分鐘的數(shù)據(jù),窗口時間間隔為5分鐘
6 input DStream :一個inputDStream是一個特殊的DStream 將spark streaming連接到一個外部數(shù)據(jù)源來讀取數(shù)據(jù)。
7 Receiver :長時間(可能7*24小時)運行在Excutor之上,每個Receiver負(fù)責(zé)一個inuptDStream (比如讀取一個kafka消息的輸入流)。每個Receiver,加上inputDStream 會占用一個core/slot
重點來了?。?!我們用時空維度和空間維度分別對DStream 和RDD來更加深入并且另類的理解spark streaming,以及二者之間的關(guān)系。
DStream 對應(yīng)時空維度,空間加上時間(從目前來看,spark streaming的精妙之一是用時間來解耦合,是目前所見最好的解耦合的方式),RDD對應(yīng)空間維度,整個sparkStreaming是時空維度。
縱軸為空間維度:代表的是RDD的依賴關(guān)系構(gòu)成的具體的處理邏輯的步驟,是用DStream來表示的。
橫軸為時間維度:按照特定的時間間隔不斷地生成job對象,并在集群上運行。
隨著時間的推移,基于DStream Graph 不斷生成RDD Graph ,也即DAG的方式生成job,并通過Job Scheduler的線程池的方式提交給spark cluster不斷的執(zhí)行。(sparkStreaming只關(guān)注時間維度不關(guān)注空間維度)
由上可知,RDD 與 DStream的關(guān)系如下:
1.RDD是物理級別的,而 DStream 是邏輯級別的
2.DStream是RDD的封裝類,是RDD進(jìn)一步的抽象
3.DStream 是RDD的模板。DStream要依賴RDD進(jìn)行具體的數(shù)據(jù)計算
(注意:縱軸維度需要RDD,DAG的生成模板,需要TimeLine的job控制器
橫軸維度(時間維度)包含batch interval,窗口長度,窗口滑動時間等。)
4.inputStream和outputStream分別代表數(shù)據(jù)的輸入和輸出
5.具體的job運行在spark cluster之上,此時系統(tǒng)的容錯就非常重要,而spark streaimg的容錯非常巧妙,它巧妙的借用了spark core rdd的容錯而容錯。(RDD可以指定StorageLevel來實現(xiàn)存放多個副本用來做容錯)
6.事務(wù)處理:數(shù)據(jù)一定會被處理,并且只會對數(shù)據(jù)處理一次,這個特性對于那些諸如計費系統(tǒng)的實現(xiàn)非常重要
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。