apache-spark - 为什么我在 Spark Master 上收到“正在移除工作人员,因为我们在 60 秒内没有心跳”
问题描述
我想我可能偶然发现了一个错误并想获得其他人的意见。我在独立模式下使用 Spark 2.2.0 运行 pyspark 应用程序。我在 flatMap 中的 python 中进行了一些繁重的转换,并且驱动程序不断杀死工人。
这是我所看到的:
- 60 年代后的主人没有看到工人的任何心跳消息,它将这条消息打印到日志中:
删除 worker [worker name],因为我们在 60 秒内没有心跳
移除 [IP]:[port] 上的 worker [worker name]
告诉丢失执行人的应用程序:[执行人编号]
- 然后我在驱动程序日志中看到以下消息:
[executor IP] 上丢失 executor [executor number]:worker 丢失
- 然后工作人员终止,我在其日志中看到此消息:
司机下令关机
我查看了 Spark 源代码,据我所知,只要执行程序还活着,它就应该发送一条心跳消息,因为它正在使用 ThreadUtils.newDaemonSingleThreadScheduledExecutor 来执行此操作。
当我在其中一个工作人员上运行时,我注意到的另一件事是,执行程序 JVM 似乎在整个过程中被挂起。我在 SPARK_WORKER_CORES 环境变量中指定的 python 进程有很多,每个进程都消耗接近 100% 的 CPU。
有人对此有任何想法吗?
解决方案
我遇到了同样的问题,增加了工作间隔。
摘自 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