Spark ExecutorLostFailure - 原因:远程 RPC 客户端已解除关联.可能是由于容器超出阈值或网



我们使用Spark 2.4来处理大约445 GB的数据。我们的集群有 150 个工作线程,每个工作线程上有 7 个 CPU 和 127 GB。Spark 部署在独立模式下。 以下是我们的配置: 每个工作线程一个执行程序,分配了 7 个 CPU 和 120 GB。 RDD 中有 2000 个分区。

我看到有时由于遗嘱执行人丢失而导致工作失败。以下是错误:

驱动程序日志:

ExecutorLostFailure (executor 82 exited caused by one of the running tasks) Reason: Remote RPC client disassociated. Likely due to containers exceeding thresholds, or network issues. Check driver logs for WARN messages.nDriver 

执行器日志:

2020-07-03 01:53:10 INFO  Worker:54 - Executor app-20200702155258-0011/13 finished with state EXITED message Command exited with code 137 exitStatus 137
[ERROR] 2020-06-29 17:34:42,074 SIGTERM handler org.apache.spark.executor.CoarseGrainedExecutorBackend - {} - RECEIVED SIGNAL TERM
- Started 161 remote fetches in 3 ms
[ERROR] 2020-06-29 17:34:42,079 SIGTERM handler org.apache.spark.executor.CoarseGrainedExecutorBackend - {} - RECEIVED SIGNAL TERM
687.0 in stage 87.0 (TID 45809). 66993 bytes result sent to driver

我还注意到一个工作框由于 OOM 错误而关闭,但我在驱动程序或工人日志中没有看到任何 OOM 错误。

早些时候,我曾尝试使用3个CPU,每个执行器运行2个执行程序,每个执行程序60 GB,RDD中有2000个分区,但随后执行程序丢失问题也是如此。

我认为我们有足够的内存分配给执行器,但执行器也丢失了代码 137,这被认为是由于内存问题,但驱动程序或执行器日志中没有 OOM 异常。

我尝试将"spark.memory.fraction"更新为"0.8",我看到作业的成功率更高,但随后也因上述错误而失败。

可能不是通用的解决方案,但我通过将spark.executor.memory减少到我设置的一半来解决这个问题,并且它奏效了。我猜可能是因为 Spark 以外的应用程序也在运行并消耗我的集群机器上的内存。将所有内存分配给 spark 应用程序将导致机器速度变慢,从而失去通信。

最新更新