我正在用火花纱簇模式进行测试。 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
答案 0 :(得分:1)
Spark区分引发某些异常的代码和外部问题,例如代码失败和容器失败。 但是spark不将抢占视为容器故障。
请参阅ApplicationMaster.scala
,如果达到容器故障限制,火花将决定退出。
它从YarnAllocator
获取失败执行程序的数量。
YarnAllocator
在某些情况下会更新其失败的容器。但不是抢占,请参见同一功能中的case ContainerExitStatus.PREEMPTED
。
我们使用spark 2.0.2,其中代码略有不同,但逻辑相同。 修复似乎也为抢占而更新了失败的容器收集。