Dataflow テンプレート

Dataflow テンプレートを使用すると、Google Cloud 上のパイプラインをステージングし、Google Cloud Console、gcloud コマンドライン ツール、または REST API 呼び出しを使用して実行できます。クラシック テンプレートは、Cloud Storage 上で実行グラフとしてステージングされます。一方で Flex テンプレートはパイプラインを Docker イメージとしてパッケージ化し、それらのイメージをプロジェクトの Container Registry でステージングします。テンプレートは、Google 提供のテンプレートを使用することも、自身で作成することもできます。

テンプレート化されていない Dataflow のデプロイと比較すると、テンプレートには次のようなメリットがあります。

  • パイプラインは、従来のデプロイ環境でよく使用される開発環境や関連する依存関係を使用せずに実行できます。これは、繰り返し実行するバッチジョブをスケジュールする際に便利です。
  • テンプレートは、パイプラインの作成(デベロッパーが実施)をパイプラインの実行から分離します。したがって、パイプラインが実行されるたびにコードを再コンパイルする必要はありません。
  • ランタイムのパラメータによってパイプラインの実行をカスタマイズできます。
  • 技術者でなくても、Google Cloud Console、gcloud コマンドライン ツール、または REST API を使用してテンプレートを作成できます。

テンプレート化されていないジョブとテンプレート化されたジョブの比較

Dataflow テンプレートによって、テンプレート化されていないジョブ実行ワークフローとは異なる、新しい開発と実行のワークフローが採用されました。テンプレートのワークフローでは、実行のステップから開発のステップが分離されます。

テンプレートを使用しない Dataflow ジョブ

Apache Beam パイプラインの開発とジョブの実行は、通常、開発環境内で行われます。

テンプレート化された Dataflow ジョブの典型的なワークフロー:

  1. デベロッパーが開発環境を作成し、パイプラインを開発します。環境には、Apache Beam SDK やその他の依存関係が含まれます。
  2. ユーザーは、開発環境からパイプラインを実行します。Apache Beam SDK が Cloud Storage 内のファイルをステージングし、ジョブ リクエスト ファイルを作成して、そのファイルを Dataflow サービスに送信します。

テンプレート化された Dataflow ジョブ

クラシック テンプレートまたは Flex テンプレートを使用している場合は、ステージングと実行は別々の手順となります。このように分離されているため、ジョブを実行できるユーザーとジョブの実行元となる場所を柔軟に決定できます。

テンプレート化された Dataflow ジョブの典型的なワークフロー:

  1. デベロッパーが開発環境を作成し、パイプラインを開発します。環境には、Apache Beam SDK やその他の依存関係が含まれます。
  2. この手順は、使用するテンプレートの種類によって異なります。
    • クラシック テンプレートデベロッパーがパイプラインを実行し、テンプレートを作成します。Apache Beam SDK が Cloud Storage 内のファイルをステージングし、テンプレート ファイル(ジョブ リクエストと類似したもの)を作成して、Cloud Storage 内にテンプレート ファイルを保存します。
    • Flex テンプレートデベロッパーがパイプラインを Docker イメージにパッケージ化し、その後、gcloud コマンドライン ツールで Flex テンプレート仕様ファイルを Cloud Storage にビルドして保存します。
  3. 他のユーザーは、Cloud Console、gcloud コマンドライン ツール、または REST API を使用して、Dataflow サービスにテンプレート ファイルの実行リクエストを送信するジョブを簡単に実行できます。

また、Dataflow モニタリング ユーザー インターフェースからクラシック テンプレート ジョブのクローンを作成できます。クローン作成ジョブの送信フォームにはパラメータ値が事前に入力されていますが、これらはジョブの実行前に変更できます。

ジョブのクローンを作成するには、次の手順を行います。

  1. クローンを作成するジョブのジョブの詳細ページに移動します。
  2. クローンを作成)をクリックします。
  3. 必要に応じて、ジョブ パラメータを更新します。
  4. [Run Job] をクリックして、新しいジョブを送信します。

クラシック テンプレートまたは Flex テンプレートを使用する場合と使用しない場合における、パイプラインの作成および実行のさまざまなステージについては、すべての Dataflow パイプラインを再利用可能なテンプレートに変換するをご覧ください。

使用するテンプレートの種類を評価する

クラシック テンプレートよりも柔軟性の高い Flex テンプレートを使用すると、Dataflow ジョブの細かいバリエーションを単一のテンプレートから起動でき、任意のソースまたはシンク I/O の使用が可能になります。クラシック テンプレートの場合、テンプレート作成プロセス中に実行グラフが構築されます。Flex テンプレートの実行グラフは、テンプレートの実行時にユーザーが指定したランタイム パラメータに基づいて動的に作成されます。つまり、Flex テンプレートを使用する場合、同じテンプレートでさまざまなタスク(ソースやシンクのファイル形式の変更など)を行うために細かいバリエーションを加えることができます。

テンプレート化されたジョブの比較

次の表は、クラシック テンプレートとフレックス テンプレートの類似点と相違点をまとめたものです。
機能 クラシック テンプレート Flex テンプレート
ステージングと実行の個別のステップ
Google Cloud Console、gcloud ツール、または REST API 呼び出しを使用してテンプレートを実行する
コードを再コンパイルせずにパイプラインを実行する
開発環境と関連の依存関係を使用せずにパイプラインを実行する
ランタイムのパラメータでパイプラインの実行をカスタマイズする
ストリーミング ジョブの更新が可能1
FlexRS をサポート1
ジョブグラフの作成時に検証を実行してランタイム エラーを減らす ×
テンプレート作成後にジョブの実行グラフを変更可能 ×
SQL パラメータをサポート ×
ValueProvider 以外の I/O インターフェースをサポート ×

注:

1. ストリーミング更新または FlexRS 機能を使用するには、ベースイメージ バージョン 20210120_RC00 で FlexRS テンプレートを再構築する必要があります。

クラシック テンプレートと Flex テンプレート ジョブでは、ステージングと実行が異なるステップで行われます。ただし、テンプレート化された 2 種類のジョブは異なるステージング アーティファクトを生成します。クラシック テンプレートを使用する場合、ステージングされたアーティファクトは、JSON シリアル化された実行グラフを含むテンプレートです。Flex テンプレートの場合、ステージングされたアーティファクトは、JAR ファイルまたは Python コードを含む Docker イメージです。

SDK バージョンの要件

独自のテンプレートを作成する際は、使用している Apache Beam SDK のバージョンでテンプレートの作成がサポートされていることを確認します。

Java

Apache Beam SDK 2.x for Java を使用してテンプレートを作成するには、バージョン 2.0.0-beta3 以降が必要です。

Python

Apache Beam SDK 2.x for Python を使用してテンプレートを作成するには、バージョン 2.0.0 以降が必要です。

gcloud コマンドライン ツールを使用してテンプレートを実行するには、Cloud SDK バージョン 138.0.0 以降が必要です。

次のステップ