Spark Shuffle之Tungsten Sort Shuffle

源文件放在github,隨著理解的深入,不斷更新,如有謬誤之處,歡迎指正。原文鏈接https://github.com/jacksu/utils4s/blob/master/spark-knowledge/md/tungsten-sort-shuffle.md
正如你所知,spark實(shí)現(xiàn)了多種shuffle方法,通過 spark.shuffle.manager來確定。暫時總共有三種:hash shuffle、sort shuffle和tungsten-sort shuffle,從1.2.0開始默認(rèn)為sort shuffle。本節(jié)主要介紹tungsten-sort。spark在1.4以后可以通過(spark.shuffle.manager = tungsten-sort)開啟Tungsten-sort shuffle。如果Tungsten-sort 發(fā)現(xiàn)自己無法處理,則會自動使用 Sort Based Shuffle進(jìn)行處理。Tungsten-sort優(yōu)化點(diǎn)主要有:

  • 直接在serialized binary data上操作,不需要反序列化,使用unsafe內(nèi)存copy函數(shù)直接copy數(shù)據(jù)。

  • 提供cache-efficient sorter ShuffleExternalSorter 排序壓縮記錄指針和partition ids,使用一個8bytes的指針,把排序轉(zhuǎn)化成了一個指針數(shù)組的排序。

  • spilling的時候不需要反序列化和序列化

  • spill的merge過程也無需反序列化即可完成,但需要shuffle.unsafe.fastMergeEnabled的支持

當(dāng)且僅當(dāng)下面條件都滿足時,才會使用新的Shuffle方式:

  • Shuffle dependency 不能帶有aggregation 或者輸出需要排序

  • Shuffle 的序列化器需要是 KryoSerializer 或者 Spark SQL's 自定義的一些序列化方式.* > Shuffle 文件的數(shù)量不能大于 16777216

  • 序列化時,單條記錄不能大于 128 MB

優(yōu)點(diǎn)

很多性能的優(yōu)化

缺點(diǎn)

  1. 不可以在mapper端排序
  2. 不穩(wěn)定
  3. 沒有提供off-heap排序緩存

參考

Spark Tungsten-sort Based Shuffle 分析
探索Spark Tungsten的秘密

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容