RDD的依賴關係

Lineage(血統)

在spark中,數據的處理和計算都是通過RDD的轉換進行的。由於RDD是不可變的,在轉換的過程中就會生成新的RDD。而這些RDD的順序就形成了類似血緣的關係,新的RDD會依賴於舊的RDD。spark會將這一血緣關係記錄下來,這樣就能提高容錯性能,當集羣中有節點宕機後造成RDD部分數據丟失,就可以根據這個Lineage來進行重新計算來恢復丟失的數據。在RDD中有一個toDebugString方法來查看Lineage。

窄依賴

窄依賴就是父RDD的一個分區,最多隻能給子RDD的一個分區使用,就是典型的1對1關係。如圖所示:
在這裏插入圖片描述

寬依賴

寬依賴是指父RDD的一個分區被子RDD的多個分區使用,是1對多的關係。寬依賴會引起shuffle,速度會比較慢,因爲shuffle的話要等對應的父RDD的所有分區的數據全部處理完才能進行處理,如下圖所示:
在這裏插入圖片描述

DAG(有向無環圖)

spark中的RDD經過一些列轉換就形成了DAG。根據RDD之間的依賴關係的不同將DAG劃分成不同的Stage,對於窄依賴,partition的轉換處理在Stage中完成計算。對於寬依賴,由於有Shuffle的存在,只能在parent RDD處理完成後,才能開始接下來的計算,因此寬依賴是劃分Stage的依據。通過下圖我們可以清楚的知道,stage = shuffle次數 + 1。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章