pySpark容错配置

时间:2015-11-18 15:43:18

标签: apache-spark google-cloud-dataproc

我在纱线模式下在大型Spark群集上运行很长时间(+ 3小时)。 运行spark的VM工作人员托管在Google Cloud Dataproc上,其中大部分都可以在执行期间销毁(可抢占的虚拟机成本更低)。

发生这种情况时,作业失败,因为在失败的工作人员的容器日志中,由于此错误导致被破坏的工作人员的任务失败:

Executor is not registered

我已经尝试将spark.task.maxFailures设置为1000,但这似乎并不是非常有效:即使作业完成,任务似乎也不会自动重新分配并且计算任务分配给这个特定工作者似乎回到了初始阶段。

是否有办法提供更容错的配置,只是排除无响应的执行者并重新分配他们的任务?

如果被问到,我可以包括ressourcemanager日志,nodemanager和容器日志,但我认为它不相关。

1 个答案:

答案 0 :(得分:5)

这似乎是可预防的工人离开集群的回归。

问题不仅仅是失败不容忍。在集群的生命周期中,可持续工作者不断创建和销毁。每次工作人员离开时,YARN将在检测到故障并重新创建容器之前等待15米的心跳。这可以使你的工作运行时间更长。

我们将在下一个版本中修复此问题。

解决方法:

以下操作会强制工作人员在关闭时离开群集。

创建以下脚本并将其上传到GCS存储桶:

#!/bin/sh
sudo sed -i "s/.*Stopping google-dataproc-agent.*/start-stop-daemon --stop --signal USR2 --quiet --oknodo --pidfile \${AGENT_PID_FILE}; sleep 5s/" \
   /etc/init.d/google-dataproc-agent

让我们说你上传到gs://my-bucket/fix.sh

现在使用此初始化操作重新创建集群:

gcloud beta dataproc clusters create my-cluster ... \
  --initialization-actions gs://my-bucket/fix.sh

您可以通过ssh进入主节点并在纱线节点列表上设置监视来验证这一点:

gcloud compute ssh my-cluster-m
watch yarn node -list

在另一个终端中,发出集群更新命令,以减少工作人员数量并验证纱线节点数量是否相应更改。