??大家好,我是不溫卜火,是一名計算機學院大資料專業大二的學生,昵稱來源于成語—
不溫不火,本意是希望自己性情溫和,作為一名互聯網行業的小白,博主寫博客一方面是為了記錄自己的學習程序,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新,但由于水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只有csdn這一個平臺,博客主頁:https://buwenbuhuo.blog.csdn.net/
??本片博文為大家帶來的是Shuffle 調優,

目錄

- 1. 調節map端緩沖區大小
在 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.shuffle.file.buffer", "64")
- 2. 調節reduce端拉取資料緩沖區大小
Spark Shuffle 程序中,shuffle reduce task 的 buffer緩沖區大小決定了reduce task 每次能夠緩沖的資料量,也就是每次能夠拉取的資料量,如果記憶體資源較為充足,適當增加拉取資料緩沖區的大小,可以減少拉取資料的次數,也就可以減少網路傳輸的次數,進而提升性能,
reduce端資料拉取緩沖區的大小可以通過spark.reducer.maxSizeInFlight引數進行設定,默認為48MB,
val conf = new SparkConf()
.set("spark.reducer.maxSizeInFlight", "96")
- 3. 調節reduce端拉取資料重試次數
Spark Shuffle 程序中,reduce task 拉取屬于自己的資料時,如果因為網路例外等原因導致失敗會自動進行重試,對于那些包含了特別耗時的 shuffle 操作的作業,建議增加重試最大次數(比如60次),以避免由于 JVM 的full gc 或者網路不穩定等因素導致的資料拉取失敗,在實踐中發現,對于針對超大資料量(數十億~上百億)的shuffle 程序,調節該引數可以大幅度提升穩定性,
reduce 端拉取資料重試次數可以通過spark.shuffle.io.maxRetries引數進行設定,該引數就代表了可以重試的最大次數,如果在指定次數之內拉取還是沒有成功,就可能會導致作業執行失敗,默認為3,
val conf = new SparkConf()
.set("spark.shuffle.io.maxRetries", "6")
- 4. 調節reduce端拉取資料等待間隔
Spark Shuffle 程序中,reduce task 拉取屬于自己的資料時,如果因為網路例外等原因導致失敗會自動進行重試,在一次失敗后,會等待一定的時間間隔再進行重試,可以通過加大間隔時長(比如60s),以增加shuffle操作的穩定性,
reduce端拉取資料等待間隔可以通過spark.shuffle.io.retryWait引數進行設定,默認值為5s,
val conf = new SparkConf()
.set("spark.shuffle.io.retryWait", "60s")
- 5. 調節SortShuffle排序操作閾值
對于SortShuffleManager,如果shuffle reduce task的數量小于某一閾值則shuffle write程序中不會進行排序操作,而是直接按照未經優化的HashShuffleManager的方式去寫資料,但是最后會將每個task產生的所有臨時磁盤檔案都合并成一個檔案,并會創建單獨的索引檔案,
當你使用SortShuffleManager時,如果的確不需要排序操作,那么建議將這個引數調大一些,大于shuffle read task的數量,那么此時map-side就不會進行排序了,減少了排序的性能開銷,但是這種方式下,依然會產生大量的磁盤檔案,因此shuffle write性能有待提高, SortShuffleManager排序操作閾值的設定可以通過spark.shuffle.sort. bypassMergeThreshold這一引數進行設定,默認值為200,
val conf = new SparkConf()
.set("spark.shuffle.sort.bypassMergeThreshold", "400")
??本次的分享就到這里了,

??好書不厭讀百回,熟讀課思子自知,而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力,
??如果我的博客對你有幫助、如果你喜歡我的博客內容,請“點贊” “評論”“收藏”一鍵三連哦!聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看,
??碼字不易,大家的支持就是我堅持下去的動力,點贊后不要忘了關注我哦!


轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/1456.html
標籤:其他
