1. 程式人生 > >Spark效能調優 troubleshooting shuffle調優 reduce端緩衝大小以避免OOM

Spark效能調優 troubleshooting shuffle調優 reduce端緩衝大小以避免OOM

reduce導致 記憶體溢位原因

reduce端拉取map端task,是map端寫一點資料,reduce端taskk就會拉取一小部分資料,立即進行後面的聚合、運算元函式應用
每次拉取資料量大小是有buffer決定的,而預設大小是48M,有時候,map端的資料量很大的情況下,reduce端所有task拉取資料全部達到緩衝最大極限值,然後加上reduce端執行聚合函式程式碼會建立大量物件。這時候可能會出現記憶體不夠,也就是OOM,reduce端記憶體溢位

解決方案

以降低效能換取執行
減少reduce端task緩衝的大小。我寧願多拉取幾次,但是每次同時能夠拉取到reduce端每個task的數量,比較少,就不容易發生OOM記憶體溢位的問題。(比如,可以調節成12M)

這種時候,只能採取犧牲效能的方式了,spark作業,首先,第一要義,就是一定要讓它可以跑起來。分享一個經驗,曾經寫過一個特別複雜的spark作業,寫完程式碼以後,半個月之內,就是跑不起來,裡面各種各樣的問題,需要進行troubleshooting。調節了十幾個引數,其中就包括這個reduce端緩衝的大小。總算作業可以跑起來了。

如果記憶體充足,可以調大引數,提高效能

如果map端資料量不是特別大,然後application 資源很充足情況下,可以適當調大reduce端緩衝大小,這樣reduce task每次拉取資料量就很會變大,拉取次數降低,這樣就會減少網路開銷,reduce端聚合操作執行也會減少,效能應該會提高。但是前提是,記憶體充足

http://spark.apache.org/docs/2.0.0/configuration.html
在這裡插入圖片描述

參考 shuffle定址

https://mp.csdn.net/mdeditor#