RDD和它依賴的父RDD(s)的關(guān)系有兩種不同類型,即窄依賴(narrow dependency)和 寬依賴(wide dependency)

窄依賴:
一:map、filter執(zhí)行的方法有三個(gè)分區(qū),分別在三個(gè)不同的機(jī)器上,對其進(jìn)行map、filter操作,生成的新的數(shù)據(jù)還在原來的機(jī)器上,子依賴和父依賴的數(shù)據(jù)的分區(qū)一一對應(yīng)
二:union(并集):執(zhí)行操作前有兩個(gè)RDD,假如第一個(gè)RDD的數(shù)據(jù)分區(qū)對應(yīng)的機(jī)器是node-1和nod-2,第二個(gè)分區(qū)對應(yīng)的機(jī)器是node-3和node-4,合并之后成為一個(gè)RDD,該RDD有四個(gè)分區(qū),他的數(shù)據(jù)位置也沒有發(fā)送變化,分區(qū)的數(shù)據(jù)和執(zhí)行操作前數(shù)據(jù)一一對應(yīng)
三:join with inputs co-partitioned:執(zhí)行操作前有兩個(gè)RDD,執(zhí)行操作后生成一個(gè)新的RDD,該方法進(jìn)行了網(wǎng)絡(luò)傳輸,假如執(zhí)行操作前的數(shù)據(jù)對應(yīng)的機(jī)器為node-1~6,執(zhí)行操作后的分區(qū)為node-1~3,只不過是子RDD一個(gè)分區(qū)的數(shù)據(jù)來自與兩個(gè)分區(qū)的數(shù)據(jù)

舉例:




? ? ? ? ? ?注:這時(shí)候,我們的join操作就是窄依賴
窄依賴是指每個(gè)父RDD的一個(gè)分區(qū)的數(shù)據(jù)最多被子RDD的一個(gè)分區(qū)所使用,例如map、filter、union等操作都會產(chǎn)生窄依賴;
????????需要特別說明的是對join操作有兩種情況:如果兩個(gè)RDD在進(jìn)行join操作時(shí),一個(gè)RDD的partition僅僅和另一個(gè)RDD中已知個(gè)數(shù)的Partition進(jìn)行join,那么這種類型的join操作就是窄依賴,例如圖1中左半部分的join操作(join with inputs co-partitioned);其它情況的join操作就是寬依賴,例如圖1中右半部分的join操作(join with inputs not co-partitioned),由于是需要父RDD的所有partition進(jìn)行join的轉(zhuǎn)換,這就涉及到了shuffle,因此這種類型的join操作也是寬依賴。
寬依賴:
寬依賴是指一個(gè)父RDD的分區(qū)數(shù)據(jù)會被多個(gè)子RDD的Partition所使用,例如groupByKey、reduceByKey、sortByKey等操作都會產(chǎn)生寬依賴;

? ?舉例:



?總結(jié):在這里我們是從父RDD的partition被使用的個(gè)數(shù)來定義窄依賴和寬依賴,因此可以用一句話概括下:如果父RDD的一個(gè)Partition被子RDD的一個(gè)Partition所使用就是窄依賴,否則的話就是寬依賴。因?yàn)槭谴_定的partition數(shù)量的依賴關(guān)系,所以RDD之間的依賴關(guān)系就是窄依賴;由此我們可以得出一個(gè)推論:即窄依賴不僅包含一對一的窄依賴,還包含一對固定個(gè)數(shù)的窄依賴。
? ? ? ? ? ? ? ?一對固定個(gè)數(shù)的窄依賴的理解:即子RDD的partition對父RDD依賴的Partition的數(shù)量不會隨著RDD數(shù)據(jù)規(guī)模的改變而改變;換句話說,無論是有100T的數(shù)據(jù)量還是1P的數(shù)據(jù)量,在窄依賴中,子RDD所依賴的父RDD的partition的個(gè)數(shù)是確定的,而寬依賴是shuffle級別的,數(shù)據(jù)量越大,那么子RDD所依賴的父RDD的個(gè)數(shù)就越多,從而子RDD所依賴的父RDD的partition的個(gè)數(shù)也會變得越來越多。
Shuffle的定義:
? ? ? ? ? ? ? Shuffle的含義是洗牌,將數(shù)據(jù)打散,父RDD的一個(gè)分區(qū)的數(shù)據(jù)如果給了子RDD的多個(gè)分區(qū)(只有存在這種可能),就是Shuffle
? ? ? ? ? ? ?Shuffle會有網(wǎng)絡(luò)傳輸數(shù)據(jù),但有網(wǎng)絡(luò)傳輸,并不意味著就是Shuffle