默认情况下,如果失败,Dataproc 作业不会自动重启。 通过使用可选设置,您可以将作业设置为在失败时重启。将作业设置为重启时,需指定每小时的最大重试次数(每小时最多重试 10 次)和/或总重试次数上限(总重试次数的最大值为 240 次)。
重启作业可缓解常见类型的作业失败问题,包括内存不足问题和意外的 Compute Engine 虚拟机重新启动。可重启的作业尤其有利于进行长时间运行和流式传输作业。例如,您可以重启 Dataproc 集群上运行的 Spark 流式传输作业,以确保流式传输作业具有弹性。
可重启的作业语义
以下语义用于报告作业是成功还是失败:
- 如果驱动程序终止并显示代码
0
,作业将报告为成功。 - 如果出现以下情况,则作业将报告为失败:
- 驱动程序在 10 分钟内终止 4 次以上并显示非零代码。
- 驱动程序终止并显示非零代码,同时超出了
max_failures_per_hour
或max_failures_total
设置。
- 如果驱动程序退出并显示非零代码,没有发生抖动,并且没有超出
max_failures_per_hour
和max_failures_total
设置,则作业将重启。
作业设计考虑事项
- 将您的作业设计为能够安全处理重启。例如,如果您的作业写入目录,则很可能会在作业重启时存在目录。
- 具有检查点的 Apache Spark 流式传输作业会在失败后重启,但这些作业不会报告 Yarn 状态。
创建和使用可重启的作业
您可以在提交作业时通过 gcloud CLI gcloud 命令行工具、Dataproc REST API 或 Google Cloud 控制台 指定每小时可以重启作业的次数上限以及总重试次数上限。
示例:如果您希望作业在一小时内最多重试 10 次但不超过 5 次,请将 max-failures-total
设置为 10,将 max-failures-per-hour
设置为 5。
gcloud
使用 --max-failures-per-hour
标志指定每小时可以重启作业的次数上限(每小时可以重试的最大值为 10 次)和/或使用 --max-failures-total
标志指定总重试次数上限(总重试次数的最大值为 240 次)。
gcloud dataproc jobs submit job type \ --region=region \ --max-failures-per-hour=number \ --max-failures-total=number \ ... other args
REST API
如需指定每小时可以重启作业的次数上限(每小时可以重试的最大值为 10 次)和/或总重试次数上限(总重试次数的最大值为 240 次),请分别设置 Job.JobScheduling
maxFailuresPerHour
和/或 maxFailuresTotal
字段。
示例
POST /v1/projects/project-id/regions/us-central1/jobs:submit/ { "projectId": "project-id", "job": { "placement": { "clusterName": "example-cluster" }, "reference": { "jobId": "cea7ae0b...." }, "sparkJob": { "args": [ "1000" ], "mainClass": "org.apache.spark.examples.SparkPi", "jarFileUris": [ "file:///usr/lib/spark/examples/jars/spark-examples.jar" ] }, "scheduling": { "maxFailuresPerHour": 5 "maxFailuresTotal": 10 } } }
控制台
如需提交可重启的作业,您可以在 Cloud Dataproc 提交作业页面上指定每小时重启次数上限(最大值为每小时 10 次)。 目前,Google Cloud 控制台不支持“总重启次数上限”设置。