再実行可能なジョブ

デフォルトでは、Dataproc のジョブは失敗したときに自動的に再実行しません。 オプションの設定を使用することで、失敗したときに再実行するようにジョブを設定できます。再実行するジョブを設定するときに、1 時間あたりの最大再試行回数(最大値は 1 時間あたり 10 回)および / または再試行の最大回数(最大値は合計 240)を指定します。

ジョブを再実行することで、メモリ不足の問題や、Compute Engine 仮想マシンの予期しない再起動など、一般的な種類のジョブの失敗が軽減されます。再実行可能なジョブは、実行時間の長いジョブやストリーミング ジョブに特に役に立ちます。たとえば、Dataproc クラスタで実行する Spark ストリーミング ジョブを再実行して、ストリーミング ジョブの復元力を確認できます。

再実行可能なジョブのセマンティクス

ジョブの成功または失敗の報告には、次のセマンティクスが適用されます。

  • ドライバがコード 0 で終了した場合、ジョブは成功と報告されます。
  • 次の場合、ジョブは失敗と報告されます。
    • ドライバが 10 分間に 5 回以上、ゼロ以外のコードで終了した場合。
    • ドライバがゼロ以外のコードで終了した回数が、max_failures_per_hour または max_failures_total の設定を超えた場合。
  • ドライバがゼロ以外のコードで終了し、スラッシングが発生しておらず、回数が max_failures_per_hourmax_failures_total の設定の範囲内である場合、ジョブは再実行されます。

ジョブの設計に関する考慮事項

  • 再実行を適切に処理するようにジョブを設計します。たとえば、ジョブがディレクトリに書き込む場合、ジョブの再実行時にディレクトリが存在する可能性を考慮します。
  • Apache Spark ストリーミング ジョブは障害発生後にチェックポイントを再実行できますが、これらのジョブは Yarn ステータスを報告しません。

再実行可能なジョブの作成と使用

gcloud CLI の gcloud コマンドライン ツール、Dataproc REST API、または Google Cloud Console を使用してジョブを送信するときに、ジョブを 1 時間あたり最大何回再実行できるか、および最大再試行回数を指定できます。

例: ジョブを最大 10 回再、1 時間に 5 回まで再試行するには、max-failures-total を 10、max-failures-per-hour を 5 に設定します。

gcloud

ジョブを 1 時間あたり再実行できる最大回数(最大再試行回数は 10 回)および / または合計再試行の最大回数(最大値は 240 回)を、--max-failures-per-hour フラグと --max-failures-total フラグをそれぞれ使用して指定します。

gcloud dataproc jobs submit job type \
    --region=region \
    --max-failures-per-hour=number \
    --max-failures-total=number \
    ... other args

REST API

Job.JobSchedulingmaxFailuresPerHour または maxFailuresTotal(あるいはその両方)のフィールドを使用して、ジョブを再実行できる最大回数(最大再試行回数は 1 時間あたり 10 回)、再試行の最大回数(最大再試行回数は 240 回)を指定します。

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
}
}
}

コンソール

再実行可能なジョブを送信するには、Dataproc の [ジョブを送信] ページで 1 時間あたりの最大再実行回数を指定します(最大値は 1 時間あたり 10 回)。現在、Google Cloud コンソールでは最大合計再起動回数の設定は使用できません。