使用YARN客户端模式如何防止Spark Executors丢失?

How to prevent Spark Executors from getting Lost when using YARN client mode?

我有一个 Spark 作业,它在本地运行良好,数据较少,但是当我在 YARN 上安排它执行时,我不断收到以下错误,慢慢地所有执行程序都从 UI 中删除,我的作业失败了

15/07/30 10:18:13 ERROR cluster.YarnScheduler: Lost executor 8 on myhost1.com: remote Rpc client disassociated
15/07/30 10:18:13 ERROR cluster.YarnScheduler: Lost executor 6 on myhost2.com: remote Rpc client disassociated

我使用以下命令在 yarn-client 模式下安排 Spark 作业

 ./spark-submit --class com.xyz.MySpark --conf "spark.executor.extraJavaOptions=-XX:MaxPermSize=512M" --driver-java-options -XX:MaxPermSize=512m --driver-memory 3g --master yarn-client --executor-memory 2G --executor-cores 8 --num-executors 12  /home/myuser/myspark-1.0.jar

这里有什么问题?我是 Spark 的新手。

我有一个非常相似的问题。无论我们分配给他们多少内存,我都有很多执行者丢失了。

如果您使用的是 yarn,解决方案是设置 --conf spark.yarn.executor.memoryOverhead=600,或者,如果您的集群使用 mesos,您可以尝试 --conf spark.mesos.executor.memoryOverhead=600

在 spark 2.3.1+ 中,配置选项现在是 --conf spark.yarn.executor.memoryOverhead=600

似乎我们没有为 YARN 本身留出足够的内存,容器因此而被杀死。设置后我们有不同的内存不足错误,但不是相同的丢失执行程序问题。

当我遇到同样的问题时,删除日志并释放更多的 hdfs space 奏效了。

您可以按照此 AWS post 来计算内存开销(以及其他要调整的 spark 配置):best-practices-for-successfully-managing-memory-for-apache-spark-applications-on-amazon-emr