spark中寬依賴和窄依賴


https://www.jianshu.com/p/736a4e628f0f

1.1 窄依賴

窄依賴是指1個父RDD分區對應1個子RDD的分區。換句話說,一個父RDD的分區對應於一個子RDD的分區,或者多個父RDD的分區對應於一個子RDD的分區。所以窄依賴又可以分為兩種情況:

  • 1個子RDD的分區對應於1個父RDD的分區,比如map,filter,union等算子
  • 1個子RDD的分區對應於N個父RDD的分區,比如co-partioned join

1.2 寬依賴

寬依賴是指1個父RDD分區對應多個子RDD分區。寬依賴有分為兩種情況

  • 1個父RDD對應非全部多個子RDD分區,比如groupByKey,reduceByKey,sortByKey
  • 1個父RDD對應所有子RDD分區,比如未經協同划分的join

2. 為什么Spark將依賴分為窄依賴和寬依賴

2.1 窄依賴(narrow dependency)

可以支持在同一個集群Executor上,以pipeline管道形式順序執行多條命令,例如在執行了map后,緊接着執行filter。分區內的計算收斂,不需要依賴所有分區的數據,可以並行地在不同節點進行計算。所以它的失敗恢復也更有效,因為它只需要重新計算丟失的parent partition即可

2.2 寬依賴(shuffle dependency)

則需要所有的父分區都是可用的,必須等RDD的parent partition數據全部ready之后才能開始計算,可能還需要調用類似MapReduce之類的操作進行跨節點傳遞。從失敗恢復的角度看,shuffle dependency牽涉RDD各級的多個parent partition




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM