火花-如何知道作业执行期间哪个执行器失败并避免它们?

时间:2018-11-11 13:54:32

标签: apache-spark yarn

背景:

我正在具有大量工作负载的大型群集上运行火花作业,该群集上始终有状态不佳的节点,该节点接收任务,响应驱动程序的心跳信号,不实际工作并且需要永远运行,最终可能会失败,因此驱动程序需要在其他地方重新提交任务。

我如何处理病态节点:

我正在将function theScore (students) { var obj = {}; var score = 0; for(i of students){ if(i.score > score ) { score = i.score; // Keep track of the highest-score-found-so-far obj = i; // Keep track of the highest scoring object } } return obj; } 设置为spark.blacklist.enabled,以确保重新提交的任务转到其他地方(眨眼间完成工作)。但是,正如我在日志中发现的那样,黑名单仅适用于一个阶段:

True

因此,下一阶段肯定会再次尝试患病节点,并且很有可能患病节点可能不会恢复正常。我只是遇到这样的情况,一个节点将失败的任务保持48小时180次,并最终杀死了自己。

Blacklisting executor 28 for stage 0

像这样的执行器会严重影响Spark应用程序的性能。

所以我想出了计划B:我自己杀了它

我发现有两个函数可以管理执行器18/11/11 19:47:26 WARN cluster.YarnSchedulerBackend$YarnSchedulerEndpoint: Container marked as failed: container_1534870268016_1640615_01_000051 on host: ill-datanode. Exit status: -100. Diagnostics: Container released on a *lost* node SparkSession.sparkContext.killExecutor(executorId: String)。但是,要使用此类功能删除执行程序,我必须知道上次作业中哪个执行程序失败。

该怎么做?

0 个答案:

没有答案