Dataflow を使用してパイプラインを実行すると、Dataflow ランナーはパイプライン コードと依存関係を Cloud Storage バケットにアップロードし、Dataflow ジョブを作成します。この Dataflow ジョブは、Google Cloud のマネージド リソースでパイプラインを実行します。
- Apache Beam Java SDK バージョン 2.54.0 以降を使用するバッチ パイプラインの場合、Runner v2 がデフォルトで有効になっています。
- Apache Beam Java SDK を使用するパイプラインで、多言語パイプラインの実行、カスタム コンテナの使用、Spanner または Bigtable の変更ストリーム パイプラインの使用を行うには、Runner v2 が必要です。それ以外の場合は、デフォルトのランナーを使用します。
- Apache Beam Python SDK バージョン 2.21.0 以降を使用するパイプラインの場合、Runner v2 がデフォルトで有効になっています。Apache Beam Python SDK バージョン 2.45.0 以降を使用するパイプラインの場合、Dataflow Runner v2 が使用可能な唯一の Dataflow ランナーです。
- Apache Beam SDK for Go の場合、利用可能な Dataflow ランナーは Dataflow Runner v2 だけです。
Runner v2 はサービスベースのアーキテクチャを使用しており、一部のパイプラインにはメリットがあります。
Dataflow Runner v2 を使用すると Python コンテナを事前にビルドできます。これにより、VM の起動時間と水平自動スケーリングのパフォーマンスが向上する可能性があります。詳細については、Python 依存関係を事前にビルドするをご覧ください。
Dataflow Runner v2 は多言語パイプラインをサポートしています。これは、他の Apache Beam SDK で定義された変換を Apache Beam パイプラインで使用できるようにする機能です。Dataflow Runner v2 は Python SDK パイプラインからの Java 変換の使用と Java SDK パイプラインからの Python 変換の使用をサポートしています。Runner v2 を使用せずに Apache Beam パイプラインを実行する場合、Dataflow ランナーは言語固有のワーカーを使用します。
制限事項
Dataflow Runner v2 には次の要件があります。
- Dataflow Runner v2 では、ストリーミング ジョブに Streaming Engine が必要です。
- Dataflow Runner v2 にはストリーミング ジョブに Streaming Engine が必要なため、Dataflow Runner v2 を必要とする Apache Beam 変換では、ストリーミング ジョブにも Streaming Engine を使用する必要があります。たとえば、Apache Beam SDK for Python の Pub/Sub Lite I/O コネクタは、Dataflow Runner v2 を必要とする言語横断的な変換です。この変換を使用するジョブまたはテンプレートで Streaming Engine を無効にしようとすると、ジョブは失敗します。
- Apache Beam Java SDK を使用するストリーミング パイプラインの場合、Runner v2 では
MapState
クラスとSetState
クラスはサポートされていません。Java パイプラインでMapState
クラスとSetState
クラスを使用するには、Streaming Engine を有効にし、Runner v2 を無効にして、Apache Beam SDK バージョン 2.58.0 以降を使用します。 - Apache Beam Java SDK を使用するバッチ パイプラインとストリーミング パイプラインの場合、
OrderedListState
クラスとAfterSynchronizedProcessingTime
クラスはサポートされていません。
Dataflow Runner v2 を有効にする
Dataflow Runner v2 を有効にするには、Apache Beam SDK の構成手順に沿って操作します。
Java
Dataflow Runner v2 には、Apache Beam Java SDK バージョン 2.30.0 以降が必要です(バージョン 2.44.0 以降を推奨)。
Apache Beam Java SDK バージョン 2.54.0 以降を使用するバッチ パイプラインの場合、Runner v2 がデフォルトで有効になっています。
Runner v2 を有効にするには、--experiments=use_runner_v2
フラグを使用してジョブを実行します。
Runner v2 を無効にするには、--experiments=disable_runner_v2
フラグを使用します。
一部のパイプラインは、Runner v2 に自動的にオプトインされます。パイプラインでこの機能が使用されないようにするには、--experiments=disable_runner_v2
パイプライン オプションを使用します。
Python
Apache Beam Python SDK バージョン 2.21.0 以降を使用するパイプラインの場合、Runner v2 がデフォルトで有効になっています。
Dataflow Runner v2 は、Apache Beam Python SDK バージョン 2.20.0 以前ではサポートされていません。
サポートされている SDK バージョンでパイプラインが動作しているにもかかわらず、ご使用のパイプラインで Runner v2 が使用されない場合があります。その場合、Runner v2 を使用してジョブを実行するには、--experiments=use_runner_v2
フラグを使用します。
Runner v2 を無効にするときに、ジョブが auto_runner_v2
テストとして識別されている場合は、--experiments=disable_runner_v2
フラグを使用します。Apache Beam Python SDK バージョン 2.45.0 以降では Runner v2 を無効にできません。
Go
Dataflow Runner v2 は、Apache Beam SDK for Go で使用できる唯一の Dataflow ランナーです。Runner v2 はデフォルトで有効になっています。
ジョブをモニタリングする
モニタリング インターフェースを使用して、メモリ使用率、CPU 使用率などの Dataflow ジョブの指標を確認します。
ワーカー VM のログは、ログ エクスプローラまたは Dataflow モニタリング インターフェースで利用できます。ワーカー VM のログには、ランナー ハーネス プロセスのログと SDK プロセスのログが含まれます。VM ログを使用して、ジョブのトラブルシューティングを行うことができます。
Runner v2 のトラブルシューティング
Dataflow Runner v2 を使用してジョブのトラブルシューティングを行う場合は、標準のパイプラインのトラブルシューティング手順に沿って行います。次のリストは、Dataflow Runner v2 の仕組みに関する追加情報です。
- Dataflow Runner v2 ジョブは、ワーカー VM で 2 種類のプロセス(SDK プロセスとランナー ハーネス プロセス)を実行します。パイプラインと VM のタイプによっては、1 つまたは複数の SDK プロセスが存在する場合がありますが、VM ごとに存在するランナー ハーネス プロセスは 1 つのみです。
- SDK プロセスはユーザーコードやその他の言語固有の関数を実行しますが、それ以外はすべてランナー ハーネス プロセスによって管理されます。
- ランナー ハーネス プロセスは、Dataflow からの作業のリクエストを開始する前に、すべての SDK プロセスの接続を待機します。
- SDK プロセスの起動時にワーカー VM が依存関係をダウンロードしてインストールすると、ジョブの遅延が発生することがあります。ライブラリの起動時やインストール時など、SDK プロセス中に問題が発生すると、ワーカーはそのステータスを異常として報告します。起動時間が長くなる場合は、プロジェクトで Cloud Build API を有効にして、次のパラメータを指定してパイプラインを送信します:
--prebuild_sdk_container_engine=cloud_build
- Dataflow Runner v2 はチェックポインティングを使用するため、各ワーカーは変更のバッファリング中に最大 5 秒間待機してから、その変更を送信して処理を続行する場合があります。その結果、約 6 秒のレイテンシが予想されます。
- ユーザーコードの問題を診断するには、SDK プロセスのワーカーログを調べます。ランナー ハーネスのログにエラーが見つかった場合は、サポートに連絡してバグを報告してください。
- Dataflow 多言語パイプラインに関連する一般的なエラーをデバッグするには、多言語パイプラインのヒントのガイドをご覧ください。