Spark _17 _SparkShuffle、HashShuffleManager、SortShuffleManager
SparkShuffle
-
SparkShuffle概念
reduceByKey會將上一個RDD中的每一個key對應的所有value聚合成一個value,然后生成一個新的RDD,元素類型是<key,value>對的形式,這樣每一個key對應一個聚合起來的value。
問題:聚合之前,每一個key對應的value不一定都是在一個partition中,也不太可能在同一個節點上,因為RDD是分布式的彈性的數據集,RDD的partition極有可能分布在各個節點上。
如何聚合?
– Shuffle Write:上一個stage的每個map task就必須保證將自己處理的當前分區的數據相同的key寫入一個分區文件中,可能會寫入多個不同的分區文件中。
?– Shuffle Read:reduce task就會從上一個stage的所有task所在的機器上尋找屬于己的那些分區文件,這樣就可以保證每一個key所對應的value都會匯聚到同一個節點上去處理和聚合。
Spark中有兩種Shuffle管理類型,HashShufflManager和SortShuffleManager,Spark1.2之前是HashShuffleManager, Spark1.2引入SortShuffleManager,在Spark 2.0+版本中已經將HashShuffleManager丟棄。
?HashShuffleManager
- 普通機制
- 普通機制示意圖
?
- 執行流程
- 總結
M(map task的個數)*R(reduce task的個數)
- 存在的問題
? ? ?產生的磁盤小文件過多,會導致以下問題:
- ??合并機制
- 合并機制示意圖
- 總結
產生磁盤小文件的個數:C(core的個數)*R(reduce的個數)
SortShuffleManager
- 普通機制
- 普通機制示意圖
?
- 執行流程
- 總結
產生磁盤小文件的個數: 2*M(map task的個數)
- ?bypass機制
- bypass機制示意圖
?
- 總結
- .bypass運行機制的觸發條件如下:
? ? ? ? ? ? shuffle reduce task的數量小于spark.shuffle.sort.bypassMergeThreshold的參數值。這個值默認是200。
- .產生的磁盤小文件為:2*M(map task的個數)
總結
以上是生活随笔為你收集整理的Spark _17 _SparkShuffle、HashShuffleManager、SortShuffleManager的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark _16 _SparkUIMa
- 下一篇: Spark _18 _Shuffle文件