可重启的作业

默认情况下,如果失败,Dataproc 作业不会自动重启。 通过使用可选设置,您可以将作业设置为在失败时重启。将作业设置为重启时,需指定每小时的重试次数上限(每小时可以重试的最大值为 10 次)和/或总重试次数上限(总重试次数的最大值为 240 次)。

重启作业可缓解常见类型的作业失败问题,包括内存不足问题和意外的 Compute Engine 虚拟机重新启动。可重启的作业尤其有利于进行长时间运行和流式传输作业。例如,您可以重启 Dataproc 集群上运行的 Spark 流式传输作业,以确保流式传输作业具有弹性。

可重启的作业语义

以下语义用于报告作业是成功还是失败:

  • 如果驱动程序终止并显示代码 0,作业将报告为成功
  • 如果出现以下情况,则作业将报告为失败
    • 驱动程序在 10 分钟内终止 4 次以上并显示非零代码。
    • 驱动程序终止并显示非零代码,同时超出了 max_failures_per_hourmax_failures_total 设置。
  • 如果驱动程序退出并显示非零代码,没有发生抖动,并且没有超出 max_failures_per_hourmax_failures_total 设置,则作业将重启

作业设计考虑事项

  • 将您的作业设计为能够安全处理重启。例如,如果您的作业写入目录,则很可能会在作业重启时存在目录。
  • 具有检查点的 Apache Spark 流式传输作业会在失败后重启,但这些作业不会报告 Yarn 状态。

创建和使用可重启的作业

您可以指定每小时可以重启作业的次数上限以及通过 Cloud SDK gcloud 命令行工具、Dataproc REST APIGoogle Cloud Console 提交作业时可以重试的总次数上限。

示例:如果您希望作业在一小时内最多重试 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 次)。 目前,Cloud Console 不支持“总重启次数上限”设置。