首页 > 解决方案 > 在纱线杀死执行程序后,Spark 不断重新启动执行程序

问题描述

我正在使用火花纱线集群模式进行测试。火花作业在较低优先级队列中运行。当更高优先级的工作来临时,它的容器会被抢占。然而,它在被杀死后立即重新启动容器。更高优先级的应用程序再次杀死他们。所以应用程序陷入了这种僵局。

这里讨论了执行器的无限重试。在日志中的跟踪下方找到。

2019-05-20 03:40:07 [dispatcher-event-loop-0] INFO TaskSetManager :54 Task 95 failed because while it was being computed, its executor exited for a reason unrelated to the task. Not counting this failure towards the maximum number of failures for the task.

所以似乎我设置的任何重试计数都没有被考虑。是否有一个标志表明应该计算 executor 中的所有失败,并且当 maxFailures 发生时作业应该失败?

火花版本 2.11

标签: apache-sparkhadoop-yarn

解决方案


Spark 区分代码抛出一些异常和外部问题,即代码故障和容器故障。但 spark 不认为抢占是容器故障。

ApplicationMaster.scala,如果达到容器故障限制,这里 spark 决定退出。它从YarnAllocator. YarnAllocator在某些情况下更新其失败的容器。但不适用于抢占,请参见case ContainerExitStatus.PREEMPTED相同的功能。

我们使用 spark 2.0.2,其中代码略有不同但逻辑相同。修复似乎也更新了失败的容器集合以进行抢占。


推荐阅读