Apache Beamのコンセプトと開発指南書
本記事
この記事はApache Beamのコンセプトや開発方針を調査します。
別の記事にて、実際にApache BeamのPipelineを開発してみようと思います。
1. Apache Beamとは
Apache Beamとは、
Apache Beamとは、バッジ処理とストリーム処理を統合されたプログラミングモデル
です。また、Beamがサポートしている以下のような分散処理バックエンドで実行することができます。
また、公式の対応表は以下の通りです。
特に他のストリーム処理やバッジ処理を行うものは「システム」と呼ばれることが多いのに対して「プログラミングモデル」というものは新しい気がします。
以下の記事になぜApache Beam(Cloud Dataflow)を採用するべきかを書いています。
特に
ストリーミングとバッチの未来は Apache Beam にあります。
の部分にはApache Beam一択になるのではないかと思います。ちなみに他のストリーム処理を基本とするシステムはApache Flinkをベースとしています。
cloudplatform-jp.googleblog.com
1.1 特徴
Apache Beamの特徴は以下の三つです。
- 統合されている。
- バッジ処理とストリーム処理をどっちとも書くことができる
- 携帯性
- あらゆる環境でパイプラインを実行することができる。
- 拡張性
- SDKを書いて、シェアしてほしい
1.2 執筆時のSDK対応
執筆時では、以下の言語でSDKが出されていました。
- Java
- Go
- Python
2. コンセプト
以下の四つの重要な概念があります。
2.1 Pipeline
データ処理全体のことです。
2.2 PCollection
Pipelineで絶えず流れるデータセットのことであり、有限でも無限でもいい。
2.3 Transform
Pipelineにおいて、実際の処理を行うものである。
2.4 SourceとSink
Sourceとは、データの取得元となるものをさす。
Sinkとは、Pipelineの出力として吐き出すものである。
3. Pipeline設計指南書
3.1 Pipelineの基本
Apache Beam Pipelineを開発するなかで、何を考慮しなければならないのでしょうか。
項目 | 備考 |
---|---|
データの入力 | どのくらいのデータがあるのかを知る必要がある |
データのスキーマ | どのスキーマで扱うか。データベースのレコードなのか、テキストなのか。 |
データの変換 | Beamの主目的であるはず。 |
データの出力 | どこに何を出力するか。 |
基本的なスキーマは、以下の図で表されます。
しかし、実際にはもっと複雑です。
設定を書いたoptions
を引数に、実装される。
PipelineOptions options = PipelineOptionsFactory.create(); Pipeline p = Pipeline.create(options);
自身で定義したオプションを使いたいのならば以下のようにしてPipelineOption
をextend
して拡張するようになります。
PipelineOptionsFactory.register(MyOptions.class); MyOptions options = PipelineOptionsFactory.fromArgs(args) .withValidation() .as(MyOptions.class);
ここではfromArgs
を使ってコマンドラインから使うようにしています。
3.2 PCollectionを分岐させる
画像がもっとも直感的だと思うので、ご覧ください。
TrasformAとTransformBに分かれている。
3.3 複数の出力をする単一のtrasform
タグ付きアウトプットというものを使用していくつものPCollection
を作成している。
3.4 PCollectionのマージ
PCollection
を集約するときに使います。
二つ種類があって、
Flatten
:Join
:
3.4 マルチリソース
ひとつ以上のリソースから参照することができます。
ここでは、3.3
のマージを使用しています。
4. Pipelineのテスト
個人的にテストのないコードを見るだけでぞっとします。 たとえば、合計金額を算出するような単純な関数でさえもテストがあると安心できます。
では、Pipelineではどのようにするべきか解説をします。
一般的には、リモートでデバックするよりもローカルでユニットテストをした方がシンプルで、早く済むことが多いです。
Apache BeamではDirectRunner
を使用するとテストのヘルプができます。
これでテストしたあとは、小さなスケールで試してください。
また、SDKを使うと、様々なユニットテストをすることができます。
DoFn
でPipelineのTransformをテストできます。- Composite Transform全体をテストできます。
- Pipelineでエンドツーエンドのテストもすることができます。
詳しくは別の記事で解説しようと思います。