pySpark容错配置

Pau*_* K. 3 apache-spark google-cloud-dataproc

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

发生这种情况时,作业失败,因为失败的工作程序的容器日志中的此错误导致已销毁的工作程序上的任务失败:

Executor is not registered
Run Code Online (Sandbox Code Playgroud)

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

是否有一种方法可以使用更容错的配置来排除无响应的执行程序并重新分配其任务?

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

tix*_*tix 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
Run Code Online (Sandbox Code Playgroud)

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

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

gcloud beta dataproc clusters create my-cluster ... \
  --initialization-actions gs://my-bucket/fix.sh
Run Code Online (Sandbox Code Playgroud)

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

gcloud compute ssh my-cluster-m
watch yarn node -list
Run Code Online (Sandbox Code Playgroud)

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