農林漁牧網

您現在的位置是:首頁 > 漁業

控制reduce端緩衝大小以避免OOM

2022-08-13由 尚矽谷教育 發表于 漁業

buffer加多少

控制reduce端緩衝大小以避免OOM

故障排除控制reduce端緩衝大小以避免OOM

在Shuffle過程,reduce端task並不是等到map端task將其資料全部寫入磁碟後再去拉取,而是map端寫一點資料,reduce端task就會拉取一小部分資料,然後立即進行後面的聚合、運算元函式的使用等操作。

reduce端task能夠拉取多少資料,由reduce拉取資料的緩衝區buffer來決定,因為拉取過來的資料都是先放在buffer中,然後再進行後續的處理,buffer的預設大小為48MB。

reduce端task會一邊拉取一邊計算,不一定每次都會拉滿48MB的資料,可能大多數時候拉取一部分資料就處理掉了。

雖然說增大reduce端緩衝區大小可以減少拉取次數,提升Shuffle效能,但是有時map端的資料量非常大,寫出的速度非常快,此時reduce端的所有task在拉取的時候,有可能全部達到自己緩衝的最大極限值,即48MB,此時,再加上reduce端執行的聚合函式的程式碼,可能會建立大量的物件,這可難會導致記憶體溢位,即OOM。

如果一旦出現reduce端記憶體溢位的問題,我們可以考慮減小reduce端拉取資料緩衝區的大小,例如減少為12MB。

在實際生產環境中是出現過這種問題的,這是典型的以效能換執行的原理。reduce端拉取資料的緩衝區減小,不容易導致OOM,但是相應的,reudce端的拉取次數增加,造成更多的網路傳輸開銷,造成效能的下降。

注意,要保證任務能夠執行,再考慮效能的最佳化。