pause-on-failure サービス オプションを使用すると、Dataflow バッチジョブの状態を保持できます。この機能を使用すると、ジョブの実行を一時停止し、パイプラインの外部にある問題に対処して、完了した作業を失うことなく処理を再開できます。この機能を使用してジョブを一時停止した場合、パイプライン コードやワーカー VM の構成(マシンタイプなど)を変更することはできません。
この機能を有効にすると、一時的な停止や割り当ての制約が発生した場合に、リソース費用をより適切に管理し、ジョブの信頼性を向上させることができます。pause-on-failure を有効にすると、最大一時停止時間を構成して、パイプラインのライフサイクルをさらに制御できます。pause-on-failure フラグが有効になっているパイプラインを手動で一時停止または再開することもできます。
pause-on-failure のメリット
pause-on-failure サービス オプションを使用すると、中断中にバッチジョブの進行状況を保持できるため、合計コンピューティング時間とリソース費用を削減できます。
- チェックポイントの保持: ジョブが失敗した場合、最初から再起動するのではなく、最後に記録されたチェックポイントから再開できます。これにより、完了したデータブロックを再処理する必要がなくなり、正常に完了した作業をやり直すための費用を支払う必要がなくなります。
- 外部依存関係の軽減: 外部サービスの一時的な停止やレート制限など、一時的な問題からパイプラインを保護します。 ジョブを一時停止すると、完了した作業を失うことなく実行を再開する前に、根本原因に対処できます。
- 非決定論的な障害の処理: 断続的または非決定論的な障害が発生しやすいワークロードの場合、このオプションを使用すると、シーケンシャルな試行ごとに増分進行を確保し、ジョブ全体の失敗を防ぐことができます。
- リソースと割り当ての管理: 優先度の低いバッチジョブを一時停止して、割り当てを一時的に解放したり、GPU や TPU などの価値の高いリソースを、ベースラインの進行状況を失うことなく、機械学習モデルのトレーニングや推論などの緊急性の高いワークロードに再割り当てしたりできます。
サポートと制限事項
ジョブの一時停止(手動または失敗時)には、次の要件と制限があります。
- Dataflow ジョブはバッチジョブである必要があります。
- ジョブは Dataflow Shuffle を使用する必要があります。
- ジョブを実行するときに、
pause_on_failureサービス オプションを指定する必要があります。 - ジョブが以前に一時停止に失敗していない必要があります。
pause-on-failure ジョブの動作
pause-on-failure 機能を有効にすると、ワークアイテムが 4 回失敗した後にジョブが自動的に一時停止します。これらの失敗は、ログで
Error message from worker を含むジョブ メッセージと、Completed work item ITEM_NUMBER
UNSUCCESSFULLY を含むワーカー メッセージとして識別されます。在庫切れや割り当てエラーなどの他のタイプの障害では、自動一時停止はトリガーされません。代わりに、これらの障害により、ジョブは通常どおり失敗します。pause-on-failure を有効にすると、ジョブを手動で一時停止することもできます。
ジョブの状態遷移
Dataflow ジョブが一時停止すると、次の状態に移行します。
- 一時停止中: ジョブが処理を停止し、 ワーカー VM を削除して、バックエンドの状態をアーカイブする中間状態。サービスが VM の削除を完了するまで、VM の料金が請求されます。
- 一時停止: ジョブが完全に停止します。この時点では、 アーカイブされた Shuffle データに対してのみ課金されます。
例外的な動作
次のようなシナリオでは、pause-on-failure が予期しない動作をする可能性があります。
- 完了間近のジョブを手動で一時停止すると、ジョブが一時停止するのではなく完了する可能性があります。
- まれに、ジョブが一時停止に失敗することがあります。このような場合、手動で一時停止した場合はジョブが実行状態に戻り、エラーが原因でジョブが一時停止している場合はジョブが失敗状態になります。
処理の再開
ジョブが再開すると、サービスは次のようにワークアイテムを処理します。
- 完了した作業: ジョブが一時停止したときに完全に完了したステージやワークアイテム は再処理されません。
- 進行中の作業: ジョブが 一時停止したときに進行中だったワークアイテムは、最初から再処理されます。
- 失敗回数: すべてのワークアイテムの失敗回数がゼロにリセットされます。つまり、ワークアイテムがさらに 4 回失敗するまで、ジョブは自動的に一時停止しません。
pause-on-failure を有効にする
ジョブで pause-on-failure を有効にするには、ジョブの実行時に pause_on_failure Dataflow サービス オプションを使用します。
Java
--dataflowServiceOptions=pause_on_failure
Python
--dataflow_service_options=pause_on_failure
Go
--dataflow_service_options=pause_on_failure
最大一時停止時間を指定する
デフォルトでは、ジョブは最大 7 日間(7d)一時停止したままになります。この最大一時停止時間は、1 時間(1h)から 7 日間(7d)の間で手動で構成できます。
d(日)と h(時間)のみがサポートされています。1 日は 24 時間と定義されます。
夏時間などの要因により、カレンダーの日付の長さと一致しない場合があります。
最大一時停止時間を過ぎると、ジョブはキャンセルされ、再開できなくなります。
たとえば、次の例では、最大一時停止時間を 1 日に設定します。
Java
--dataflowServiceOptions=pause_on_failure=pause_duration:1d
Python
--dataflow_service_options=pause_on_failure=pause_duration:1d
Go
--dataflow_service_options=pause_on_failure=pause_duration:1d
Dataflow ジョブを手動で一時停止する
ジョブを手動で一時停止する手順は次のとおりです。
コンソール
Dataflow の [ジョブ] ページに移動します。
一時停止するジョブをクリックします。
ジョブを一時停止するには、ジョブのステータスが実行中 である必要があります。
ジョブの詳細ページで、[一時停止] をクリックします。
gcloud
Dataflow ジョブを一時停止するには、gcloud dataflow
jobs コマンドを
Cloud Shell または
gcloud CLI がインストールされたローカル ターミナルで使用します。
シェルを開きます。
実行中の Dataflow ジョブのジョブ ID を一覧表示し、一時停止するジョブのジョブ ID をメモします。
gcloud dataflow jobs list--regionフラグを設定しない場合、使用可能なすべてのリージョンの Dataflow ジョブが表示されます。次を実行します。
gcloud dataflow jobs pause JOB_ID --region=REGIONJOB_ID はメモしたジョブ ID に、 REGION はジョブのリージョンに置き換えます。
API
Dataflow REST
API を使用してジョブを一時停止するには、
projects.locations.jobs.update
エンドポイントを使用し、次のリクエスト ボディを渡します。
{
"requestedState": "JOB_STATE_PAUSING"
}
重要: requestedState として
JOB_STATE_PAUSED を誤って渡さないでください。
一時停止中または一時停止した Dataflow ジョブをキャンセルする
一時停止中 または一時停止した Dataflow ジョブは、通常どおりキャンセルできます。ジョブをキャンセルすると、ジョブの料金は請求されなくなりますが、ジョブを再開することはできません。
一時停止したジョブは、最大一時停止 時間が経過すると自動的にキャンセルされます。
Dataflow ジョブを再開する
一時停止したジョブを手動で再開する手順は次のとおりです。
コンソール
Dataflow の [ジョブ] ページに移動します。
再開するジョブをクリックします。
ジョブを再開するには、ジョブのステータスが一時停止 (一時停止中 ではない)である必要があります。
ジョブの詳細ページで、[再開] をクリックします。
gcloud
Dataflow ジョブを再開するには、Cloud Shell または gcloud CLI がインストールされたローカル ターミナルで gcloud dataflow
jobs コマンド を使用します。
シェルを開きます。
一時停止した Dataflow ジョブのジョブ ID を一覧表示し、再開するジョブのジョブ ID をメモします。
gcloud dataflow jobs list--regionフラグを設定しない場合、使用可能なすべてのリージョンの Dataflow ジョブが表示されます。次を実行します。
gcloud dataflow jobs resume JOB_ID --region=REGIONJOB_ID はジョブ ID に、REGION は ジョブのリージョンに置き換えます。
API
Dataflow REST API を使用してジョブを再開するには、
projects.locations.jobs.update
エンドポイントを使用し、次のリクエスト ボディを渡します。
{
"requestedState": "JOB_STATE_RUNNING"
}
次のステップ
- 実行中のパイプラインを停止する方法を確認する。
- この機能を使用するために必要なバッチジョブのDataflow Shuffle について理解する。
- エラーを解決するには、トラブルシューティング パイプライン ガイドを 参照する。
- バッチジョブの処理速度が遅い場合や停止している場合のトラブルシューティング方法 を確認する。