七 Spark效能調優 Shuffle 調優

2021-09-28 11:27:53 字數 2004 閱讀 9250

目錄

一、調節 map 端緩衝區大小

二、調節 reduce 端拉取資料緩衝區大小

三、調節 reduce 端拉取資料重試次數

四、調節 reduce 端拉取資料等待間隔

五、調節 sortshuffle 排序操作閾值

val conf = new sparkconf()

.set("spark.shuffle.file.buffer", "64")

在 spark 任務執行過程中,如果 shuffle 的 map 端處理的資料量比較大, 但是map 端緩衝的大小是固定的,可能會出現 map 端緩衝資料頻繁 spill 溢寫到磁碟檔案中的情況, 使得效能非常低下,通過調節 map 端緩衝的大小,可以避免頻繁的磁碟io 操作,進而提公升 spark 任務的整體效能。

map 端緩衝的預設配置是 32kb, 如果每個 task 處理 640kb 的資料,那麼會發生 640/32 = 20 次溢寫,如果每個 task 處理 64000kb 的資料,機會發生 64000/32=2000此溢寫,這對於效能的影響是非常嚴重的

val conf = new sparkconf()

.set("spark.reducer.maxsizeinflight", "96")

spark shuffle 過程中,shuffle reduce task 的 buffer 緩衝區大小決定了 reduce task每次能夠緩衝的資料量, 也就是每次能夠拉取的資料量,如果記憶體資源較為充足,適當增加拉取資料緩衝區的大小,可以減少拉取資料的次數,也就可以減少網路傳輸的次數,進而提公升效能。

val conf = new sparkconf()

.set("spark.shuffle.io.maxretries", "60")

spark shuffle 過程中, reduce task 拉取屬於自己的資料時,如果因為網路異常等原因導致失敗會自動進行重試對於那些包含了特別耗時的 shuffle 操作的作業,建議增加重試最大次數(比如 60 次),以避免由於 jvm 的 full gc 或者網路不穩定等因素導致的資料拉取失敗。在實踐中發現,對於針對超大資料量(數十億~上百億)的 shuffle 過程,調節該引數可以大幅度提公升穩定性。

val conf = new sparkconf()

.set("spark.shuffle.io.retrywait", "60s")

spark shuffle 過程中, reduce task 拉取屬於自己的資料時,如果因為網路異常等原因導致失敗會自動進行重試,在一次失敗後,會等待一定的時間間隔再進行重試,可以通過加大間隔時長(比如 60s),以增加 shuffle 操作的穩定性。

spark 1.6之後使用就是 sortshuffle

val conf = new sparkconf()

.set("spark.shuffle.sort.bypassmergethreshold", "400")

對於 sortshufflemanager, 如果 shuffle reduce task 的數量小於某一閾值則 shufflewrite 過程中不會進行排序操作,而是直接按照未經優化的 hashshufflemanager 的方式去寫資料,但是最後會將每個 task 產生的所有臨時磁碟檔案都合併成乙個檔案,

並會建立單獨的索引檔案。

當你使用 sortshufflemanager 時,如果的確不需要排序操作,那麼建議將這個引數調大一些,大於 shuffle read task 的數量, 那麼此時 map-side 就不會進行排序了,減少了排序的效能開銷, 但是這種方式下,依然會產生大量的磁碟檔案,因此 shuffle write 效能有待提高。

spark 效能調優

核心調優引數如下 num executors executor memory executor cores driver memory spark.default.parallelizm spark.storage.memoryfraction spark.shuffle.memoryfractio...

Spark效能調優

日常工作使用spark處理業務問題中不可避免的都會碰到需要對spark的效能進行調優的情況,這裡就介紹一下對spark的效能調優。1.調節記憶體分配 因為在spark中堆記憶體被劃分為兩塊,一塊是給rdd的cache和persist操作rdd資料快取使用的,另一塊是給spark運算元函式使用的,函式...

Spark效能調優 JVM調優

通過一張圖讓你明白以下四個問題 1.jvm gc機制,堆記憶體的組成 2.spark的調優為什麼會和jvm的調優會有關聯?因為scala也是基於jvm執行的語言 3.spark中oom產生的原因 4.如何在jvm這個層面上來對spark進行調優 補充 spark程式執行時 jvm堆記憶體分配比例 r...