Apache Beam のプログラミング モデル

Apache Beam は、バッチとストリーミングの両方のデータの並列処理パイプラインを定義するオープンソースの統合モデルです。Apache Beam プログラミング モデルは、大規模なデータ処理の構造を単純化します。Apache Beam SDK の 1 つを使用して、パイプラインを定義するプログラムを構築します。次いで、Cloud Dataflow などの Apache Beam がサポートする分散処理バックエンドの 1 つがパイプラインを実行します。このモデルのおかげで、並列処理の物理的なオーケストレーションではなく、データ処理ジョブの論理的な構成に集中できます。つまり、ジョブの実行方法ではなく、ジョブの実行内容に焦点を絞ることができます。

Apache Beam モデルでは、有効な抽象化が提供されるため、分散処理の下層部分の細かい設定(個々のワーカーの調整やデータセットの分割などのタスク)をユーザーが扱う必要がなくなります。Cloud Dataflow ではこれらの下層レベルの細かい設定が完全に管理されます。

コンセプト

このセクションでは、基本的なコンセプトの概要を示します。Apache Beam のウェブサイトにある Apache Beam プログラミング ガイドでは、Apache Beam SDK を使用したパイプラインの作成に必要な基本的なコンセプトを学習できます。

基本コンセプト

パイプライン
パイプラインは、入力データの読み取り、そのデータの変換、出力データの書き込みに関連する、一連の計算全体をカプセル化したものです。入力ソースと出力シンクは同一でも別の型でもかまいません。ユーザーはデータの形式を変換できます。Apache Beam プログラムでは、まず、Pipeline オブジェクトを構築します。そのオブジェクトを基礎として使用し、パイプラインのデータセットを作成します。各パイプラインは、反復可能な 1 つのジョブを表します。
PCollection
PCollection は、パイプライン データとして機能する複数要素のデータセットを表します。このデータセットは分散して存在する可能性があります。Apache Beam 変換では、PCollection オブジェクトをパイプラインの各ステップの入力と出力として使用します。PCollection は、固定サイズのデータセット、または継続的に更新されるデータソースの制限なしデータセットを保持できます。
変換
変換は、データを変換する処理オペレーションを表します。変換は、1 つ以上の PCollection を入力として取得し、そのコレクションの各要素に対して指定したオペレーションを実行して、1 つ以上の PCollection を出力として生成します。変換では、ほとんどすべての処理オペレーションを実行できます。これには、データに対する算術演算の実施、データの書式の変換、データのグループ化、データの読み取りと書き込み、必要な要素のみを出力するためのデータのフィルタ処理、1 つの値へのデータ要素の結合が含まれます。
ParDo
ParDo は、Apache Beam SDK のコア並列処理オペレーションです。入力 PCollection の各要素に対してユーザー指定の関数を呼び出します。ParDo は、0 個以上の出力要素を 1 つの出力 PCollection に収集します。ParDo 変換は、要素を個別に、場合によっては並行して処理します。
パイプライン I/O
Apache Beam I/O コネクタを使用すると、パイプラインにデータを読み込み、パイプラインから出力データを書き出すことができます。I/O コネクタは、ソースとシンクで構成されています。Apache Beam のすべてのソースとシンクの変換によって、さまざまなデータ ストレージ形式のデータをパイプラインが扱えるようになります。カスタム I/O コネクタを書き込むこともできます。
集計
集約は、複数の入力要素からなんらかの値を計算するプロセスです。Apache Beam における集約の主な計算パターンでは、すべての要素を共通のキーとウィンドウでグループ化します。次いで、連想演算と交換演算によって要素の各グループを結合します。
ユーザー定義関数(UDF)
Apache Beam 内の一部のオペレーションでは、変換を構成する方法としてユーザー定義コードを実行できます。ParDo では、ユーザー定義コードはすべての要素に適用するオペレーションを指定し、Combine では、値の結合方法を指定します。パイプラインには、ランナーの言語とは異なる言語で書かれた UDF が含まれている場合があります。パイプラインには、複数の言語で書かれた UDF が含まれている場合もあります。
ランナー
ランナーは、パイプラインを受け入れて実行するソフトウェアです。ほとんどのランナーは、超並列ビッグデータ処理システムへの変換装置またはアダプタです。ローカルのテストとデバッグのための他のランナーも存在します。

高度なコンセプト

イベント時間
データイベントが発生する時間。データ要素自体のタイムスタンプに基づいています。これは、実際のデータ要素がパイプラインの任意のステージで処理される時間とは対照的です。
ウィンドウ処理
ウィンドウ処理では、制限なしコレクションに対するオペレーションをグループ化できます。これは、個々の要素のタイムスタンプに応じて、コレクションを有限コレクションのウィンドウに分割することによって行います。ウィンドウ処理機能で、ランナーに要素を初期ウィンドウに割り当てる方法、グループ化された要素のウィンドウをマージする方法を指示します。Apache Beam では、さまざまな種類のウィンドウを定義したり、定義済みのウィンドウ処理機能を使用したりできます。
ウォーターマーク
Apache Beam が追跡するウォーターマークは、特定のウィンドウのすべてのデータがパイプラインに届くときを予測するためのシステムの概念です。Apache Beam は、ウォーターマークを追跡します。データが時間順または予測可能な間隔で、パイプラインに到着することは保証されていないためです。さらに、データイベントが、その生成順序と同じ順序でパイプラインに届くという保証もありません。
トリガー
トリガーは、データが到着したときに集計結果をいつ出力するかを決定します。制限付きデータの場合、すべての入力が処理された後に結果が出力されます。制限なしデータの場合、ウォーターマークがウィンドウの境界を通過するときに結果が出力されます。また、そのウィンドウの入力データがすべて処理されたとシステムで推測していることを示します。Apache Beam は、いくつかの定義済みトリガーを提供し、それらを組み合わせることができます。

次のステップ

詳しい説明については、Apache Beam ウェブサイトの Apache Beam プログラミング ガイドをご覧ください。

Apache Beam™ は、Apache Software Foundation または米国その他の諸国における関連会社の商標です。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。