rdd 寬依賴和窄依賴


Spark中RDD的高效與DAG圖有着莫大的關系,
  在DAG調度中需要對計算過程划分Stage,
  而划分的依據就是就是RDD之間的依賴關系。
  針對不同的轉換函數,RDD之間的依賴關系分為窄依賴(narrow dependency)
  和寬依賴(Wide Depencency,也稱為Shuffle Depencency)。
窄依賴: 
指父RDD的每個分區只被子RDD的一個分區所使用,子RDD分區通常對應常數個父RDD分區(O(1),與數據規模無關)

寬依賴: 
是指父RDD的每個分區都可能被多個子RDD分區所使用,子RDD分區通常對應所有的父RDD分區(O(n),與數據規模有關) 

 

相比於依賴,窄依賴對優化很有利,主要基於以下兩點:

  1、依賴往往對應着Shuffle操作,需要在運行過程中將同一個父RDD的分區傳入到不同的子RDD分區中,

中間可能涉及多個節點之間的數據傳輸;而窄依賴的每個父RDD的分區只會傳入到一個子RDD分區中,通常可以在一個節點內完成轉換

  2、當RDD分區丟失時(某個節點故障),Spark會對數據進行重算

  3、對於窄依賴,由於父RDD的一個分區只對應一個子RDD分區,這樣只需要重算和子RDD分區對應的父RDD分區即可,所以這個重算對數據的利用率是100%的

  4、對於依賴,重算的父RDD分區對應多個子RDD分區的,這樣實際上父RDD中只有一部分的數據是被用於恢復這個丟失的子RDD分區的,另一部分對應子RDD的其他未丟失分區,這就造成了多余的計算;更一般的,寬依賴中子RDD分區通常來自多個父RDD分區,極端情況下,所有的父RDD分區都要進行重新計算。

 

原文:https://blog.csdn.net/daerzei/article/details/81512412 

 


免責聲明!

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



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