纱线杀死执行者后,Spark会不断重新启动他们。

时间:2019-05-21 10:24:11

标签: apache-spark yarn

我正在用火花纱簇模式进行测试。 Spark作业在优先级较低的队列中运行。 当优先级更高的作业来临时,其容器将被抢占。 但是,它在被杀死后立即重新启动了容器。 更高优先级的应用再次杀死了他们。 因此应用程序陷入了这种僵局。

讨论执行者的无限重试here。 在日志中的跟踪下方找到。

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.

因此,似乎我没有设置任何重试计数。 是否有标志指示应计入执行程序中的所有失败,并且在发生maxFailures时作业应该失败?

spark版本2.11

1 个答案:

答案 0 :(得分:1)

Spark区分引发某些异常的代码和外部问题,例如代码失败和容器失败。 但是spark不将抢占视为容器故障。

请参阅ApplicationMaster.scala,如果达到容器故障限制,火花将决定退出。 它从YarnAllocator获取失败执行程序的数量。 YarnAllocator在某些情况下会更新其失败的容器。但不是抢占,请参见同一功能中的case ContainerExitStatus.PREEMPTED

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