Fork me on GitHub

Spark运行内存超出

Container killed by YARN for exceeding memory limits?

运行spark脚本时,经常会碰到Container killed by YARN for exceeding memory limits的错误,导致程序运行失败。

这个的意思是指executor的外堆内存超出了。默认情况下,这个值被设置为executor_memory的10%或者384M,以较大者为准,即max(executor_memory*.1, 384M).

解决办法

  • 提高内存开销
  • 减少执行程序内核的数量
  • 增加分区数量
  • 提高驱动程序和执行程序内存

提高内存开销

即直接指定堆外内存的大小

1
spark.conf.set("spark.yarn.executor.memoryOverhead", "4g")

减少执行程序内核的数量

这可减少执行程序可以执行的最大任务数量,从而减少所需的内存量。

增加分区数量

要增加分区数量,请为原始弹性分布式数据集增加 spark.default.parallelism 的值,或执行.repartition() 操作。增加分区数量可减少每个分区所需的内存量。

提高驱动程序和执行程序内存

即通过增大executor.memory的值来增大堆外内存,但是可以看到,由于乘了10%,所以提升其实很有限。

支持一下^-^
0%