RDD和它依賴的父RDD(s)的關(guān)系有兩種不同類型烙样,即窄依賴(narrow dependency)和 寬依賴(wide dependency)
窄依賴:
一:map讼撒、filter執(zhí)行的方法有三個(gè)分區(qū),分別在三個(gè)不同的機(jī)器上试读,對(duì)其進(jìn)行map、filter操作钩骇,生成的新的數(shù)據(jù)還在原來的機(jī)器上,子依賴和父依賴的數(shù)據(jù)的分區(qū)一一對(duì)應(yīng)
二:union(并集):執(zhí)行操作前有兩個(gè)RDD倘屹,假如第一個(gè)RDD的數(shù)據(jù)分區(qū)對(duì)應(yīng)的機(jī)器是node-1和nod-2,第二個(gè)分區(qū)對(duì)應(yīng)的機(jī)器是node-3和node-4纽匙,合并之后成為一個(gè)RDD,該RDD有四個(gè)分區(qū)烛缔,他的數(shù)據(jù)位置也沒有發(fā)送變化馏段,分區(qū)的數(shù)據(jù)和執(zhí)行操作前數(shù)據(jù)一一對(duì)應(yīng)
三:join with inputs co-partitioned:執(zhí)行操作前有兩個(gè)RDD轩拨,執(zhí)行操作后生成一個(gè)新的RDD,該方法進(jìn)行了網(wǎng)絡(luò)傳輸院喜,假如執(zhí)行操作前的數(shù)據(jù)對(duì)應(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等操作都會(huì)產(chǎn)生窄依賴爸邢;
????????需要特別說明的是對(duì)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ù)會(huì)被多個(gè)子RDD的Partition所使用陪白,例如groupByKey、reduceByKey膳灶、sortByKey等操作都會(huì)產(chǎn)生寬依賴咱士;
? ?舉例:
?總結(jié):在這里我們是從父RDD的partition被使用的個(gè)數(shù)來定義窄依賴和寬依賴,因此可以用一句話概括下:如果父RDD的一個(gè)Partition被子RDD的一個(gè)Partition所使用就是窄依賴轧钓,否則的話就是寬依賴序厉。因?yàn)槭谴_定的partition數(shù)量的依賴關(guān)系,所以RDD之間的依賴關(guān)系就是窄依賴毕箍;由此我們可以得出一個(gè)推論:即窄依賴不僅包含一對(duì)一的窄依賴弛房,還包含一對(duì)固定個(gè)數(shù)的窄依賴。
? ? ? ? ? ? ? ?一對(duì)固定個(gè)數(shù)的窄依賴的理解:即子RDD的partition對(duì)父RDD依賴的Partition的數(shù)量不會(huì)隨著RDD數(shù)據(jù)規(guī)模的改變而改變而柑;換句話說文捶,無論是有100T的數(shù)據(jù)量還是1P的數(shù)據(jù)量,在窄依賴中媒咳,子RDD所依賴的父RDD的partition的個(gè)數(shù)是確定的粹排,而寬依賴是shuffle級(jí)別的,數(shù)據(jù)量越大涩澡,那么子RDD所依賴的父RDD的個(gè)數(shù)就越多顽耳,從而子RDD所依賴的父RDD的partition的個(gè)數(shù)也會(huì)變得越來越多。
Shuffle的定義:
? ? ? ? ? ? ? Shuffle的含義是洗牌,將數(shù)據(jù)打散射富,父RDD的一個(gè)分區(qū)的數(shù)據(jù)如果給了子RDD的多個(gè)分區(qū)(只有存在這種可能)膝迎,就是Shuffle
? ? ? ? ? ? ?Shuffle會(huì)有網(wǎng)絡(luò)傳輸數(shù)據(jù),但有網(wǎng)絡(luò)傳輸胰耗,并不意味著就是Shuffle