再実行可能なジョブ

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

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

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

Dataproc ジョブはそのタイプを問わず、再実行可能として指定できます。これが可能なジョブは、Google Cloud Console、Google Cloud SDK の gcloud コマンドライン ツール、Dataproc REST API で送信されたものです。

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

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

既知の制限事項

Dataproc の再実行可能なジョブには、以下の制限が適用されます。

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

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

gcloud

gcloud コマンドライン ツールを使用してジョブを送信するときに、ジョブを 1 時間あたり最大何回再実行できるかを指定できます(最大再試行回数は 1 時間あたり 10 回)。

    gcloud dataproc jobs submit <job type> args --max-failures-per-hour number
    

REST API

Dataproc REST API を使用して、ジョブの再実行を設定できます。失敗時にジョブを再実行できる回数は、jobs.submit API で設定します。ジョブの最大失敗回数を設定するには、JobScheduling オブジェクトを指定し、max_failures_per_hour フィールドを設定します(最大再試行回数は 1 時間あたり 10 回)。

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

コンソール

再実行可能なジョブを送信するには、Dataproc の [ジョブを送信] ページで 1 時間あたりの最大再実行回数を指定します(最大値は 1 時間あたり 10 回)。