【问题标题】:Spark keeps relaunching executors after yarn kills them在纱线杀死执行程序后,Spark 不断重新启动执行程序
【发布时间】:2019-05-21 10:24:11
【问题描述】:

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

讨论了执行程序的无限重试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.

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

火花版本 2.11

【问题讨论】:

    标签: apache-spark hadoop-yarn


    【解决方案1】:

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

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

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

    【讨论】:

    • 答案确实在消息中。
    猜你喜欢
    • 2017-04-16
    • 2015-09-16
    • 2022-01-03
    • 2021-07-25
    • 2019-04-06
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多