gpt4 book ai didi

apache-spark - pySpark 容错配置

转载 作者:行者123 更新时间:2023-12-04 05:17:59 27 4
gpt4 key购买 nike

我在 yarn 模式下的大型 Spark 集群上运行长时间作业(+ 3 小时)。运行 spark 的 VM worker 托管在 Google Cloud Dataproc 上,其中大部分可以在执行期间销毁(成本更低的抢占式 VM)。

发生这种情况时,作业会失败,因为任务在被销毁的 worker 上失败,并在失败的 worker 的容器日志中显示此错误:

Executor is not registered

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

有没有一种方法可以让容错性更强的配置简单地排除无响应的执行程序并重新分配它们的任务?

如果需要,我可以包括 ressourcemanager 日志、nodemanager 和容器日志,但我认为这不相关。

最佳答案

这似乎是可抢占 worker 离开集群的方式的倒退。

问题不仅仅是不能容忍失败。在集群的整个生命周期中,可抢占式 worker 不断地被创建和销毁。每次 worker 离开时,YARN 都会等待 15m 的心跳,然后再检测到故障并重新创建容器。这可以使您的作业运行时间大大延长。

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

解决方法:

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

创建以下脚本并将其上传到 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 连接到主节点并在 yarn 节点列表上设置监视来验证这一点:

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

在另一个终端中,发出集群更新命令以减少 worker 数量并验证 yarn 节点数量是否相应变化。

关于apache-spark - pySpark 容错配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com