[英]Spark Shuffle Memory Overhead Issues
我在設計 Spark 作業(使用 Spark 2.3.x)時經常遇到一些問題。
簡而言之:
.groupby
或.join
操作)。 然后將結果寫入磁盤(鑲木地板)yarn.YarnAllocator: Container killed by YARN for exceeding memory limits. 18.0 GB of 18 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
由於超出內存限制yarn.YarnAllocator: Container killed by YARN for exceeding memory limits. 18.0 GB of 18 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
yarn.YarnAllocator: Container killed by YARN for exceeding memory limits. 18.0 GB of 18 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
org.apache.spark.SparkException: Job aborted due to stage failure: Task 175 in stage 92.0 failed 4 times
我想知道單個任務怎么會有這么高的內存消耗。 根據我對 Spark 工作原理的理解,應該可以使任務足夠小,以便它們適合內存。 此外,很少有任務占據了大部分運行時間,這也是次優並行化的標志。 分組單元內的數據(組 -> 所有與 groupBy 或 join 的鍵匹配的)不是很大。 (單個組鍵的聚合不能單獨導致內存問題)
我已經嘗試過的事情:
spark.sql.shuffle.partitions
-> 降低了失敗率,但也增加了運行時間任何提高性能和穩定性的想法?
編輯:
一些進一步的調查顯示,我們確實有非常傾斜的數據集。 似乎一些非常大的行的映射操作對於火花執行器處理來說非常大。
我增加了隨機分區數。 我大量增加了執行程序內存。 我更改了 spark 錯誤日志中推薦的配置設置。 現在作業運行時沒有警告/錯誤,但運行時間嚴重增加。
--executor-memory 32g
--driver-memory 16g
--conf spark.executor.memoryOverhead=8g
--conf spark.driver.maxResultSize=4g
--conf spark.sql.shuffle.partitions=3000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.