一、寬依賴與窄依賴
寬依賴(Wide or shffle Dependencies)和窄依賴(Narrow Dependencies)稽穆。
1.如圖所示一個(gè)空心方框表示一個(gè)RDD,實(shí)心藍(lán)底的框表示partition赶撰。
2.寬依賴與窄依賴的區(qū)分主要是父partition與子partition的對(duì)應(yīng)關(guān)系
(注:箭頭之前的為父partition舌镶,箭頭之后的為子partition)。
窄依賴(圖左):父partition對(duì)子partition是一對(duì)一或多對(duì)一(只有一個(gè)兒子)豪娜。
寬依賴(圖右):父partition對(duì)子partition是一對(duì)多(有多個(gè)兒子)餐胀。
窄依賴一般是對(duì)RDD進(jìn)行map,filter瘤载,union等Transformations否灾。
寬依賴一般是對(duì)RDD進(jìn)行g(shù)roupByKey,reduceByKey等操作惕虑,就是對(duì)RDD中的partition中的數(shù)據(jù)進(jìn)行重分區(qū)(shffle)坟冲。
join操作即可能是寬依賴也可能是窄依賴磨镶,當(dāng)要對(duì)RDD進(jìn)行join操作時(shí),如果RDD進(jìn)行過(guò)重分區(qū)則為窄依賴健提,否則為寬依賴琳猫。
二、Stage的劃分及容災(zāi)數(shù)據(jù)處理
如上圖所示:
A,B,C,D,E,F,G代表RDD
當(dāng)執(zhí)行算子有shffle操作的時(shí)候私痹,就劃分一個(gè)Stage脐嫂。(即寬依賴來(lái)劃分Stage)
窄依賴會(huì)被劃分到同一個(gè)Stage中,這樣它們就能以管道的方式迭代執(zhí)行紊遵。寬依賴由于依賴的上游RDD不止一個(gè)账千,所以往往需要跨節(jié)點(diǎn)傳輸數(shù)據(jù)。從容災(zāi)角度講暗膜,它們恢復(fù)計(jì)算結(jié)果的方式不同匀奏。窄依賴只需要重新執(zhí)行父RDD的丟失分區(qū)的計(jì)算即可恢復(fù)。
而寬依賴則需要考慮恢復(fù)所有父RDD的丟失分區(qū)学搜,并且同一RDD下的其他分區(qū)數(shù)據(jù)也重新計(jì)算了一次娃善。