在spark中,rdd(彈性分布式資料集)存在依賴關係,寬依賴和窄依賴。
寬依賴和窄依賴的區別是rdd之間是否存在shuffle操作。
窄依賴窄依賴指父rdd的每乙個分割槽最多被乙個子rdd的分割槽所用,即乙個父rdd對應乙個子rdd或多個父rdd對應乙個子rdd
寬依賴寬依賴指子rdd的每個分割槽都依賴於父rdd的多個分割槽
分割槽劃分規則
分割槽如何劃分
分割槽該放到集群內哪個節點
spark預設兩種劃分器:hashpartitioner和rangepartitioner
寬依賴、窄依賴的概念不僅用在排程,對容錯也有用,如果乙個節點損壞,運算是窄依賴,只要把丟失的父節點分割槽重新計算即可。而寬依賴的話,就需要使用checkpoint來檢查和重新計算。
邏輯上,每個rdd的運算元都是乙個fork/join(此join非上文的join運算元,而是指同步多個並行任務的barrier):把計算fork到每個分割槽,算完後join,然後fork/join下乙個rdd的運算元。如果直接翻譯到物理實現,是很不經濟的:一是每乙個rdd(即使 是中間結果)都需要物化到記憶體或儲存中,費時費空間;二是join作為全域性的barrier,是很昂貴的,會被最慢的那個節點拖死。如果子rdd的分割槽到 父rdd的分割槽是窄依賴,就可以實施經典的fusion優化,把兩個fork/join合為乙個;如果連續的變換運算元序列都是窄依賴,就可以把很多個 fork/join並為乙個,不但減少了大量的全域性barrier,而且無需物化很多中間結果rdd,這將極大地提公升效能。spark把這個叫做流水線(pipeline)優化。
寬依賴和窄依賴 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之間的依賴關係分類...
Spark 寬依賴和窄依賴
站在父rdd角度 窄依賴 一對一 站在父rdd角度 寬依賴 一對多 寬依賴和窄依賴 寬依賴 父rdd的分割槽被子rdd的多個分割槽使用 例如 groupbykey reducebykey sortbykey等操作會產生寬依賴,會產生shuffle 窄依賴 父rdd的每個分割槽都只被子rdd的乙個分割...