首页 > 解决方案 > 为什么我在 Spark Master 上收到“正在移除工作人员,因为我们在 60 秒内没有心跳”

问题描述

我想我可能偶然发现了一个错误并想获得其他人的意见。我在独立模式下使用 Spark 2.2.0 运行 pyspark 应用程序。我在 flatMap 中的 python 中进行了一些繁重的转换,并且驱动程序不断杀死工人。

这是我所看到的:

  1. 60 年代后的主人没有看到工人的任何心跳消息,它将这条消息打印到日志中:

删除 worker [worker name],因为我们在 60 秒内没有心跳

移除 [IP]:[port] 上的 worker [worker name]

告诉丢失执行人的应用程序:[执行人编号]

  1. 然后我在驱动程序日志中看到以下消息:

[executor IP] 上丢失 executor [executor number]:worker 丢失

  1. 然后工作人员终止,我在其日志中看到此消息:

司机下令关机

我查看了 Spark 源代码,据我所知,只要执行程序还活着,它就应该发送一条心跳消息,因为它正在使用 ThreadUtils.newDaemonSingleThreadScheduledExecutor 来执行此操作。

当我在其中一个工作人员上运行时,我注意到的另一件事是,执行程序 JVM 似乎在整个过程中被挂起。我在 SPARK_WORKER_CORES 环境变量中指定的 python 进程有很多,每个进程都消耗接近 100% 的 CPU。

有人对此有任何想法吗?

标签: apache-sparkpyspark

解决方案


我遇到了同样的问题,增加了工作间隔。

摘自 Logs start-all.sh 日志

INFO Utils: Successfully started service 'sparkMaster' on port 7077.
INFO Master: Starting Spark master at spark://master:7077
INFO Master: Running Spark version 3.0.1
INFO Utils: Successfully started service 'MasterUI' on port 8080.
INFO MasterWebUI: Bound MasterWebUI to 0.0.0.0, and started at http://master:8080
INFO Master: I have been elected leader! New state: ALIVE
INFO Master: Registering worker slave01:41191 with 16 cores, 15.7 GiB RAM
INFO Master: Registering worker slave02:37853 with 16 cores, 15.7 GiB RAM
WARN Master: Removing worker-20210618205117-slave01-41191 because we got no heartbeat in 60 seconds
INFO Master: Removing worker worker-20210618205117-slave01-41191 on slave01:41191
INFO Master: Telling app of lost worker: worker-20210618205117-slave01-41191
WARN Master: Removing worker-20210618204723-slave02-37853 because we got no heartbeat in 60 seconds
INFO Master: Removing worker worker-20210618204723-slave02-37853 on slave02:37853
INFO Master: Telling app of lost worker: worker-20210618204723-slave02-37853
WARN Master: Got heartbeat from unregistered worker worker-20210618205117-slave01-41191. This worker was never registered, so ignoring the heartbeat.
WARN Master: Got heartbeat from unregistered worker worker-20210618204723-slave02-37853. This worker was never registered, so ignoring the heartbeat.

解决方案:将以下配置添加到$SPARK_HOME/conf/spark-defaults.conf

spark.network.timeout 50000
spark.executor.heartbeatInterval 5000
spark.worker.timeout 5000

推荐阅读