首頁技術(shù)文章正文

什么是DAG?有向無環(huán)圖的幾種連貫關(guān)系講解

更新時間:2020-12-29 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

  DAG(Directed Acyclic Graph)叫做有向無環(huán)圖,Spark中的RDD通過一系列的轉(zhuǎn)換算子操作和行動算子操作形成了一個DAG。DAG是一種非常重要的圖論數(shù)據(jù)結(jié)構(gòu)。如果一個有向圖無法從任意頂點出發(fā)經(jīng)過若干條邊回到該點,則這個圖就是有向無環(huán)圖,具體如圖1所示。

圖1 DAG有向無環(huán)圖

  從圖1可以看出,4→6→1→2是一條路徑,4→6→5也是一條路徑,并且圖中不存在從頂點經(jīng)過若干條邊后能回到該點。在Spark中,有向無環(huán)圖的連貫關(guān)系被用來表達RDD之間的依賴關(guān)系。其中,頂點表示RDD及產(chǎn)生該RDD的操作算子,有方向的邊表示算子之間的相互轉(zhuǎn)化。

  根據(jù)RDD之間依賴關(guān)系的不同可以將DAG劃分成不同的Stage(調(diào)度階段)。對于窄依賴來說,RDD分區(qū)的轉(zhuǎn)換處理是在一個線程里完成,所以窄依賴會被Spark劃分到同一個Stage中;而對于寬依賴來說,由于有Shuffle的存在,所以只能在父RDD處理完成后,下一個Stage才能開始接下來的計算,因此寬依賴是劃分Stage的依據(jù),當(dāng)RDD進行轉(zhuǎn)換操作,遇到寬依賴類型的轉(zhuǎn)換操作時,就劃為一個Stage。Stage的具體劃分如圖2所示。

圖2 Stage的劃分

  在圖2中,創(chuàng)建了三個RDD的實例A、C以及E。當(dāng)RDD的實例A做groupByKey轉(zhuǎn)換操作生成B時,由于groupByKey轉(zhuǎn)換操作屬于寬依賴類型,所以就把實例A劃分為一個Stage,如Stage1;當(dāng)實例C做map轉(zhuǎn)換操作生成D, D與實例E做union轉(zhuǎn)換操作生成F,由于map和union轉(zhuǎn)換操作都屬于窄依賴類型,因此不進行Stage的劃分,而是將C、D、E、F加入到同一個Stage中;當(dāng)F與B進行join轉(zhuǎn)換操作時,由于這時的join操作是非協(xié)同劃分,所以屬于寬依賴,因此會劃分為一個Stage,如Stage2;剩下的B和G被劃分為一個Stage,如Stage3。


猜你喜歡:

不同系統(tǒng)如何加載數(shù)據(jù)創(chuàng)建RDD?

Spark RDD是什么?RDD特征介紹

Scala下載和環(huán)境變量配置教程

黑馬程序員大數(shù)據(jù)培訓(xùn)課程 

分享到:
在線咨詢 我要報名
和我們在線交談!