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

Apache spark spark-如何知道作业执行期间哪个执行器失败并避免它们?,apache-spark,yarn,Apache Spark,Yarn,背景: 我正在一个巨大的集群上运行一个spark作业,该集群的工作负载很重,不断有状态不好的节点,接收任务,响应驱动程序的心跳,不实际工作,并且需要花费很长时间才能运行,最后可能会失败,因此驱动程序需要在其他地方重新提交任务 我如何处理病态节点: 我正在将spark.blacklist.enabled设置为True,以确保重新提交的任务转到其他地方(并在眨眼间完成任务)。然而,正如我在日志中发现的,黑名单只在一个阶段起作用: Blacklisting executor 28 for stage

背景:

我正在一个巨大的集群上运行一个spark作业,该集群的工作负载很重,不断有状态不好的节点,接收任务,响应驱动程序的心跳,不实际工作,并且需要花费很长时间才能运行,最后可能会失败,因此驱动程序需要在其他地方重新提交任务

我如何处理病态节点:

我正在将
spark.blacklist.enabled
设置为
True
,以确保重新提交的任务转到其他地方(并在眨眼间完成任务)。然而,正如我在日志中发现的,黑名单只在一个阶段起作用:

Blacklisting executor 28 for stage 0
因此,下一阶段肯定会再次尝试病态节点,病态节点很有可能无法恢复正常。我刚刚遇到这样的情况,一个节点连续48小时180次失败任务,最后自杀

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
这样的执行器严重拖累了spark应用程序的性能

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

我发现有两个函数可以管理执行器,分别是
SparkSession.sparkContext.killExecutor(executor id:String)
requestExecutors(numeditionalexecutors:Int)
。但要使用此函数删除执行器,我必须知道上次作业中哪个执行器失败

如何做到这一点?

有一个火花,可以告诉你执行者是失败了还是成功了。您可以通过名称搜索提交的应用程序,然后可以获得有关执行者和作业的所有详细信息。