前言

本文隶属于专栏《Spark异常问题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见 Spark异常问题汇总

问题描述

spark submit 报错:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 2.0 failed 4 times, most recent failure: Lost task 0.3 in stage 2.0 (TID 9, bj-yarn002.aibee, executor 7): ExecutorLostFailure (executor 7 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 5.1 GB of 4.5 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
Driver stacktrace:
	at org.apache.spark.scheduler.DAGScheduler$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1524)
	at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1512)
	at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1511)

源数据

不到100M

spark-submit 参数

--executor-cores 1 --num-executors 5 --executor-memory 4g --driver-memory 4g

问题定位

这是一个与 Spark Executor 和YARN Container 共存相关的非常具体的错误。

Spark Executor 使用的内存已超过预定义的限制(通常由个别的高峰期导致的),这导致 YARN 使用前面提到的消息错误杀死 Container。

解决方案

默认情况下,“spark.yarn.executor.memoryOverhead”参数设置为 384 MB。

注意:从 Spark 2.3 开始,这个参数已经更名为:spark.executor.memoryOverhead

根据应用程序和数据负载的不同,此值可能较低。

此参数的建议值为“executorMemory * 0.10”。

我们可以将“spark.yarn.executor.memoryOverhead”的值增加到1GB,在 spark-submit 上将此添加到命令行:

–conf spark.yarn.executor.memoryOverhead=1024

关于 spark.executor.memoryOverhead 请参考我的博客——spark.executor.memoryOverhead

更多推荐

Consider boosting spark.yarn.executor.memoryOverhead