Dataflow でのカスタム コンテナのトラブルシューティング

このドキュメントでは、Dataflow でカスタム コンテナを使用する際に発生する可能性のある問題のトラブルシューティングについて説明します。主に、コンテナまたはワーカーが起動しない場合について説明します。ワーカーが起動可能で、処理が進行している場合は、パイプラインのトラブルシューティングの一般的なガイダンスに従ってください。

サポートに問い合わせる前に、コンテナ イメージに関連する問題でないことを確認してください。

  • 手順に沿ってコンテナ イメージをローカルでテストします
  • ジョブログまたはワーカーログでエラーを検索し、見つかったエラーを一般的なエラーのガイダンスと比較します。
  • パイプラインの起動に使用している Apache Beam SDK のバージョンと言語バージョンが、カスタム コンテナ イメージの SDK のバージョンと一致していることを確認します。
  • Java を使用している場合は、パイプラインの起動に使用する Java メジャー バージョンがコンテナ イメージにインストールされているバージョンと一致していることを確認します。
  • Python を使用している場合は、パイプラインの起動に使用する Python のメジャー バージョンとマイナー バージョンがコンテナ イメージにインストールされているバージョンと一致していることと、イメージに競合する依存関係がないことを確認します。pip check を実行して確認できます。

カスタム コンテナに関連するワーカーログの確認

ログ エクスプローラを使用すると、Dataflow ワーカーログでコンテナ関連のエラー メッセージを確認できます。

  1. ログ名を選択します。カスタム コンテナの起動エラーは、次のいずれかに存在する可能性があります。

    • dataflow.googleapis.com/kubelet
    • dataflow.googleapis.com/docker
    • dataflow.googleapis.com/worker-startup
    • dataflow.googleapis.com/harness-startup
  2. Dataflow Step リソースを選択して、job_id を指定します。

Error Syncing pod...」というログメッセージが表示された場合は、一般的なエラー ガイダンスに従ってください。ログ エクスプローラで次のクエリを使用すると、Dataflow ワーカーログでこれらのログメッセージを探すことができます。

resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"

一般的な問題

カスタム コンテナを使用する場合の一般的な問題は次のとおりです。

コンテナ イメージを pull できないため、ジョブでエラーが発生したか、失敗した

Dataflow ワーカーに、カスタム コンテナ イメージへのアクセス権が必要です。無効な URL、認証情報の構成の誤り、ネットワーク アクセスがないことが原因でワーカーがイメージを pull できない場合、ワーカーは起動できません。

処理がまったく開始されておらず、複数のワーカーが順次開始できないバッチジョブの場合、Dataflow でジョブが失敗します。それ以外の場合、Dataflow はエラーをログに記録しますが、長時間実行ジョブの状態破棄を回避するためのアクションは実行しません。

この問題を修正する方法については、Dataflow エラーのトラブルシューティング ページでイメージの pull リクエストがエラーで失敗したをご覧ください。

ワーカーが起動していないか、処理が進行していない

エラーが原因で SDK コンテナが起動できない場合、Dataflow は永続的なエラーか致命的なエラーかを判断できないことがあります。Dataflow は、ワーカーの再起動を継続的に試みます。

明らかなエラーがないにもかかわらず、dataflow.googleapis.com/kubelet[topologymanager] RemoveContainer INFO レベルのログがある場合は、カスタム コンテナ イメージが早期に終了し、長時間実行ワーカー SDK プロセスを開始していないことを示しています。

ワーカーが正常に起動しても処理が行われていない場合は、エラーにより SDK コンテナが起動していない可能性があります。この場合は、診断の推奨事項に次のエラーが表示されます。

Failed to start container

また、ワーカーログには、次のような行が含まれません。

Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness

ワーカーログで特定のエラーを探し、一般的なエラーのガイダンスを確認してください。

こうした問題によく見られる原因は、次のとおりです。

  • パッケージのインストールに関する問題(依存関係の問題による pip のインストール エラーなど)。Pod の同期エラーで StartContainer に失敗したをご覧ください。
  • 使用されているコンテナがワーカー VM の CPU アーキテクチャと互換性がない場合は、「exec format error」などのエラーが表示されることがあります。詳細については、Pod の同期エラーで StartContainer に失敗したをご覧ください。
  • カスタム コマンド引数、または Dockerfile に設定された ENTRYPOINT のエラー。たとえば、カスタム ENTRYPOINT は、デフォルトの起動スクリプト /opt/apache/beam/boot を開始せず、このスクリプトに引数を適切に渡しません。詳細については、コンテナのエントリポイントの変更をご覧ください。
  • 起動環境とランタイム環境で Apache Beam SDK のバージョンが一致しない場合のエラー。1 つの障害モードで、Apache Beam SDK パイプライン オプションに設定されているデフォルト値が認識されないことがあります。たとえば、ワーカーログに「sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15')」などのエラーが表示されることがあります。この問題を修正するには、パイプラインの起動と同じバージョンの Apache Beam SDK をコンテナ イメージにインストールします。詳細については、起動環境とランタイム環境との互換性を確保するをご覧ください。