高度な並列ワークロード(Embarrassingly Parallel なワークロード)は、金融、メディア、ライフ サイエンス企業でよく使用されています。通常、このような並列ワークロードの場合は、コンピューティング ノードのクラスタがデプロイされています。各ノードは、グリッド コンピューティングと呼ばれる構成で、独立した処理タスクを実行できます。並列ワークロードのデータ処理には、Dataflow と Apache Beam を使用できます。Apache Beam の詳細については、Apache Beam プログラミング ガイドをご覧ください。
高度な並列ワークロードに Dataflow を使用すると、多くのメリットがあります。
- データ処理とオーケストレーションを同じパイプラインで実行するフルマネージド ワークフローを作成できます。
- Dataflow のユーザー インターフェースと API にはオブザーバビリティ機能が含まれています。
- Dataflow は、すべてのパイプライン ステージのロギングを一元管理します。
- Dataflow の自動スケーリングでは、パフォーマンスを最大化してリソース使用量を最適化できます。
- Dataflow はフォールト トレラントであり、動的なロード バランシングを実現します。
- Dataflow はストラグラーの検出と修正を行います。
- 前処理と後処理、およびタスク処理の両方で、パイプラインのすべての側面に単一のシステムを使用できます。パイプラインで既存の C++ コードを使用することもできます。
- Dataflow が提供する組み込みの exactly once 処理を使用できます。
さらに、Dataflow にはさまざまなセキュリティ機能があります。
- パイプラインで顧客管理の暗号鍵(CMEK)を使用できます。
- Dataflow ジョブに関連付けられたネットワークにファイアウォール ルールを定義できます。
- VPC ネットワークを使用できます。
これらのワークロードでは、多くのコアで実行される機能にデータを分散する必要があります。このような分散では、並行性の高い読み取りが必要になることが多く、ダウンストリーム システムに取り込まれる大規模なデータ ファンアウトがしばしば発生します。Dataflow の中核となる機能は、リソース間でのバッチ ワークロードとストリーム ワークロードの分散と、リソース全体での自動スケーリングと動的作業再調整の管理です。そのため、高度な並列ワークロードに Dataflow を使用すると、パフォーマンス、スケーラビリティ、可用性、セキュリティのニーズが自動的に処理されます。
外部コードをパイプラインに組み込む
Apache Beam には現在、Java、Python、Go 用の SDK が組み込まれています。ただし、多くの並列ワークロードは C++ で記述されたコードを使用しています。Dataflow やその他の Google Cloud サービスでは、Apache Beam を使用して C++ バイナリ(ライブラリ)を外部コードとして実行できます。C++ バイナリを組み込むことで、フルマネージド サービスを使用して、これらのタイプのワークロードを利用することができます。また、高度な有向非巡回グラフ(DAG)を使用して、完全なパイプラインを構築することもできます。
C++ バイナリを実行するためのアプローチは、スタンドアロン バイナリをコンパイルできる他の言語のコードにも当てはまります。
エンドツーエンドの高度な並列パイプライン
Dataflow を使用すると、I/O 読み取り / 書き込み処理、分析、タスク出力をすべて同じパイプラインで行い、完全な並列パイプラインを実行できます。
たとえば、HPC の並列ワークロードには次のようなステップが組み込まれている場合があります。
内部ソースと外部ソースから元データを取り込みます。データは、無制限または制限付きのソースから取り込まれる場合があります。無制限のソースの大半は、タスクファームに使用されるテクノロジーに対応するために制限付きのソースに変換されます。
元データをデータシェイプに前処理し、タスク ファーム コンポーネントが使用できるエンコードにします。
システムで計算処理をホストに分散します。ソースからデータを取得して結果を実体化し、事後分析を行います。
事後分析を行い、結果を出力に変換します。
Dataflow では、Dataflow の機能を活用しながら、これらのステップを 1 つのパイプラインで管理できます。
1 つのシステムがすべてのステージを担当しているため、複数のパイプラインの実行を外部オーケストレーション システムで調整する必要はありません。
データの局所性により、ステージ間の境界を明示的に実体化または非実体化する必要がないため、処理効率が向上します。
システム テレメトリーの改善により、ステージでの合計バイト数に関する情報を取得できます。これは後のステージの設計で役に立ちます。
自動スケーリングにより、システム内にあるデータがパイプライン ステージを移動すると、データ量に応じてリソースがスケーリングされます。
Dataflow HPC のコア並列パイプラインは最新の DAG 実行エンジンを使用します。一般的なパイプライン プロセスはすべて 1 つの DAG で完了できるため、1 つの Dataflow パイプラインで完了できます。Apache Beam によって生成された DAG を使用して、パイプラインの形状を定義できます。
タスク ファーム システムから高度な並列ワークフローに移行する場合は、タスクからデータに移行する必要があります。PTransform
には、データ要素を受け取るプロセス関数を持つ DoFn
が含まれます。データポイントには、1 つ以上のプロパティを持つ任意のオブジェクトを指定できます。
DAG と単一のパイプラインを使用すると、ワークフロー全体を通してシステム内のすべてのデータを読み込むことができます。データベースやストレージにデータを出力する必要はありません。
高度な並列ワークフローで使用される Google Cloud コンポーネント
グリッド コンピューティング アプリケーションでは、多数のコアで実行されている機能にデータを分散する必要があります。このようなパターンでは、並行性の高い読み取りが必要になることが多く、下流のシステムに取り込まれる大規模なデータ ファンアウトがしばしば発生します。
Dataflow は、大規模な並列データ I/O の取り込みが可能な次の Google Cloud マネージド サービスと統合されています。
- Pub/Sub: キャッシュとサービス提供用のワイドカラム型ストア
- Bigtable: グローバル イベント ストリーム取り込みサービス
- Cloud Storage: 統合オブジェクト ストア
- BigQuery: ペタバイト規模のデータ ウェアハウス サービス
これらのサービスを併用することで、高度な並列ワークロード向けの魅力的なソリューションを実現できます。
Google Cloud で実行される並列ワークロードの一般的なアーキテクチャには、次のものがあります。
Apache Beam の Dataflow ランナー。このランナーは、DAG から導出された処理フローを使用して、作業をグリッドノードに分散します。単一の Apache Beam DAG を使用することで、複雑なマルチステージ パイプラインであっても、副入力や結合を使って並列するパイプライン ステージが集約されるように定義できます。
Cloud Storage。このサービスは、C++ バイナリをステージングする場所を提供します。マスメディアのユースケースの多くがそうであるように、大きなファイルを保存する必要がある場合は、そのファイルも Cloud Storage に保存されます。
次の図は、サンプル ワークフローのアーキテクチャの概要を示しています。
他のストレージ システムを使用することもできます。詳細は、Apache Beam のドキュメントのパイプライン I/O ページのストレージ システムとストリーミング ソースのリストをご覧ください。
Apache Beam の Dataflow ランナー
Dataflow を使用して、ストリーミング モードとバッチモードの両方でデータを変換、拡充します。Dataflow は Apache Beam に基づいています。
Cloud Storage
Cloud Storage は、ライブデータ配信、データ分析、機械学習(ML)、データ アーカイブを網羅する統合型オブジェクト ストレージです。Dataflow で高度な並列ワークロードを処理する場合、Cloud Storage は C++ バイナリにアクセスできます。一部の使用例では、Cloud Storage は処理段階で必要なデータ用のロケーションも提供します。
グリッド コンピューティングで必要とされる高速読み込みについては、Cloud Storage のパフォーマンス特性を理解している必要があります。Cloud Storage のデータ配信パフォーマンスの詳細については、Cloud Storage ドキュメントのリクエスト レートとアクセス配信のガイドラインを参照してください。
Bigtable
Bigtable は、大規模な分析ワークロードや運用ワークロード用に最適化された高性能 NoSQL データベース サービスです。Bigtable は Dataflow を補完します。Bigtable の主な特性である低レイテンシの読み取りと書き込み(90 パーセンタイルで 6 ミリ秒)により、数千の同時クライアントと大量のバースト ワークロードを処理できます。このような機能を持つ Bigtable は Dataflow の処理フェーズの DoFn
関数のシンクやデータソースとして最適です。
BigQuery
BigQuery は、大規模なデータ分析に対応した、高速で経済的なエンタープライズ向けフルマネージド データ ウェアハウスです。グリッドの結果は分析に使用されることが多く、グリッドのデータ出力に対して大規模な集計を実行できます。
Pub/Sub
Pub/Sub は、メッセージを生成するサービスを、それらのメッセージを処理するサービスと切り離す、非同期のスケーラブルなメッセージング サービスです。ストリーミング分析とデータ統合パイプラインに Pub/Sub を使用して、データの取り込みと分散を行うことができます。これは、サービスの統合を目的としたメッセージ指向ミドルウェア、または、タスクを並列化するためのキューとしても使用されます。
Dataflow DAG
Beam SDK を使用すると、表現力の高い DAG を構築できます。これにより、ストリームまたはバッチのマルチステージ パイプラインを簡単に作成できます。データの移動はランナーによって処理され、データはイミュータブルな並列要素コレクションである PCollection
オブジェクトとして表現されます。
次の図は、この流れを表しています。
Apache Beam SDK では DAG を定義できます。DAG ではユーザー定義コードを関数として含めることができます。通常、DAG の宣言とユーザー定義コードの両方に対して同じプログラミング言語(Java、Python または Go)が使用されます。ユーザー定義コードには、C++ などの組み込みコードを使用することもできます。
次のステップ
Dataflow HPC の並列パイプラインを操作するためのベスト プラクティスについて学習します。
チュートリアルに沿って、C++ ライブラリとカスタム コンテナを使用するパイプラインを作成する。