パイプラインの設計

このドキュメントでは、パイプラインを設計する際に考慮すべき点について説明します。

検討事項

パイプラインを設計する際は、次の点について検討してください。

  • パイプラインの入力データはどこに格納するのか。入力データは何セットあるのか。
  • データはどのような形式か。
  • データにはどのような処理を行うのか。
  • パイプラインの出力データの送信先はどこにするのか。
  • Dataflow ジョブで Assured Workloads を使用するのか。

Dataflow テンプレートの使用を検討する

Apache Beam コードを記述してパイプラインを構築する代わりに、テンプレートを使用することもできます。テンプレートは再利用できます。テンプレートを使用すると、特定のパイプライン パラメータを変更して、各ジョブをカスタマイズできます。権限を付与されたユーザーは、そのテンプレートを使用してパイプラインをデプロイできます。

たとえば、デベロッパーがテンプレートからジョブを作成し、組織内のデータ サイエンティストが後でそのテンプレートをデプロイできます。

Google 提供のテンプレートが多数用意されていますが、独自のテンプレートを作成することもできます。

Apache Beam のユーザーコードを構造化する

パイプラインを作成するときに、多くの場合、汎用の並列処理 Apache Beam 変換(ParDo)を使用します。ParDo 変換を適用するときに、ユーザーコードを DoFn オブジェクトの形式で指定します。DoFn は、分散処理関数を定義する Apache Beam SDK クラスです。

DoFn コードは小さな独立したエンティティと考えることができます。異なるマシンで多くのインスタンスが実行され、それぞれが互いを認識していない可能性があります。このため、純粋な関数(隠れ状態や外部状態に依存せず、目に見える副作用がなく、確定的な関数)を作成することをおすすめします。これは、DoFn の並列的で分散的な性質に理想的です。

純粋な関数モデルは厳しく固定されているわけではありません。Dataflow サービスが保証しない事項にコードが依存しない限り、状態情報や外部初期化データは DoFn とその他の関数オブジェクトに対して有効である場合があります。ParDo 変換を構成し、DoFn を作成する場合は、次のガイドラインを念頭に置いてください。

  • Dataflow サービスは、入力 PCollection 内のすべての要素が DoFn インスタンスによって必ず 1 回だけ処理されることを保証します。
  • Dataflow サービスは、DoFn が何回呼び出されるかを保証しません。
  • Dataflow サービスは、分散された要素が厳密にどのようにグループ化されるかを保証しません。つまり、どの要素(存在する場合)がまとめて処理されるかを保証しません。
  • Dataflow サービスは、パイプラインで作成される DoFn インスタンスの正確な数を保証しません。
  • Dataflow サービスはフォールト トレラントであり、ワーカーに問題が発生した場合にコードを複数回再試行することがあります。Dataflow サービスはコードのバックアップ コピーを作成する場合があり、手動の副作用が問題になることがあります(たとえば、コードが一意の名前を持たない一時ファイルに依存するか、これを作成する場合など)。
  • Dataflow サービスは、DoFn インスタンスごとに要素の処理をシリアル化します。コードは厳密にスレッドセーフである必要はありませんが、複数の DoFn インスタンス間で共有される状態はスレッドセーフである必要があります。

Assured Workloads

Assured Workloads は、Google Cloud のユーザーにセキュリティとコンプライアンスの要件を適用するのに役立ちます。たとえば、主権管理のある EU リージョンとサポートは、EU 在住のユーザーに対してデータ所在地とデータ主権の保証を適用するのに役立ちます。これらの機能を提供するため、Dataflow の一部の機能が制限または限定されています。Dataflow で Assured Workloads を使用する場合は、パイプラインがアクセスするすべてのリソースを組織の Assured Workloads プロジェクトまたはフォルダに配置する必要があります。次のようなリソースが該当します。

  • Cloud Storage バケット
  • BigQuery データセット
  • Pub/Sub トピックとサブスクリプション
  • Firestore データセット
  • I/O コネクタ

Dataflow では、鍵ベースのオペレーションで使用されるユーザー指定のデータキーは CMEK 暗号化で保護されません。これらのキーに個人情報(PII)が含まれている場合は、キーをハッシュ化または変換してから Dataflow パイプラインに入力する必要があります。

パイプライン間でデータを共有する

パイプライン間でデータや処理コンテキストを共有するための Dataflow 固有のパイプライン間通信メカニズムはありません。Cloud Storage のような永続ストレージ、または App Engine のようなメモリ内キャッシュを使用して、パイプライン インスタンス間でデータを共有できます。

ジョブをスケジュールする

パイプライン実行は、次の方法で自動化できます。

詳細

次の Apache Beam の記事では、パイプラインを構造化する方法、データに適用する変換を選択する方法、パイプラインの入力方法と出力方法を選択する際の考慮事項について説明します。

ユーザーコードの詳しい作成方法については、ユーザー定義関数の要件をご覧ください。