spark中rdd的高效與dag(有向無環圖)有很大的關係,在dag排程中需要對計算的過程劃分stage,劃分的依據就是rdd之間的依賴關係。rdd之間的依賴關係分為兩種,寬依賴(wide dependency/shuffle dependency)和窄依賴(narrow dependency)
窄依賴就是指父rdd的每個分割槽只被乙個子rdd分割槽使用,子rdd分割槽通常只對應常數個父rdd分割槽,如下圖所示【其中每個小方塊代表乙個rdd partition】
窄依賴有分為兩種:
窄依賴一般是對rdd進行map,filter,union等transformations。
寬依賴就是指父rdd的每個分割槽都有可能被多個子rdd分割槽使用,子rdd分割槽通常對應父rdd所有分割槽,如下圖所示【其中每個小方塊代表乙個rdd partition】
寬依賴一般是對rdd進行groupbykey,reducebykey等操作,就是對rdd中的partition中的資料進行shuffle。
對兩個rdd執行join操作可能產生窄依賴(如果這兩個rdd擁有相同的雜湊分割槽或範圍分割槽),可能是寬依賴,也可能兩種依賴都有(比如乙個父rdd有分割槽,而另一父rdd沒有)。
寬依賴的函式有:
groupbykey, join(父rdd不是hash-partitioned ), partitionby
spark任務會根據rdd之間的依賴關係,形成乙個dag有向無環圖,dag會提交給dagscheduler,dagscheduler會把dag劃分成互相依賴的多個stage,劃分stage的依據就是rdd之間的寬窄依賴。
如上圖所示,a/b/c/d/e/f代表rdd,當執行運算元存在shuffle操作的時候,就劃分乙個stage,即用寬依賴來劃分stage。窄依賴會被劃分到同乙個stage中,這樣他們就可以以管道的方式執行,寬依賴由於依賴的上游不止乙個,所以往往需要需要跨節點傳輸資料。
參考:
Spark寬依賴 窄依賴
在spark中,rdd 彈性分布式資料集 存在依賴關係,寬依賴和窄依賴。寬依賴和窄依賴的區別是rdd之間是否存在shuffle操作。窄依賴窄依賴指父rdd的每乙個分割槽最多被乙個子rdd的分割槽所用,即乙個父rdd對應乙個子rdd或多個父rdd對應乙個子rdd 寬依賴寬依賴指子rdd的每個分割槽都依...
寬依賴和窄依賴 Spark 寬依賴和窄依賴
1.前言 上一節spark dag概述 spark中rdd的高效與dag圖有著莫大的關係,在dag排程中需要對計算過程劃分stage,暴力的理解就是stage的劃分是按照有沒有涉及到shuffle來劃分的,沒涉及的shuffle的都劃分在乙個stage裡面,這種劃分依據就是rdd之間的依賴關係。針對...
Spark 寬依賴和窄依賴
spark中rdd的高效與dag圖有著莫大的關係,在dag排程中需要對計算過程劃分stage,暴力的理解就是stage的劃分是按照有沒有涉及到shuffle來劃分的,沒涉及的shuffle的都劃分在乙個stage裡面,這種劃分依據就是rdd之間的依賴關係。針對不同的轉換函式,rdd之間的依賴關係分類...