ApacheBeamフレームワークはめちゃくちゃ新しいものではないのですが、日本語情報が残念すぎるので、英語が苦手なエンジニアの方に参考にしていただければと思います。
実装部分はPythonまたはJavaで動作を確認しつつできればと思っています。(時間との兼ね合いです。。。)
目次
前提
TODO:ApacheBeamってなんぞや、パイプラインってなんぞやってドキュメントがなかったので作成予定です。
対象ドキュメント
今回は他のドキュメントを参照している部分が多いので、後で対象ドキュメントを解説した際は記事をリンクしようと思います。
ドキュメントの種類
- プログラミングガイド(構築者向け):https://beam.apache.org/documentation/programming-guide/
- 実行モデルガイド(フレームワークの動作):https://beam.apache.org/documentation/runtime/model/
- 学習ガイド(QuickStartなど):https://beam.apache.org/documentation/resources/learning-resources/
一旦QuickStartで環境構築と動作確認、書き方の確認をしつつ、公式ドキュメントを見ていく感じが良いかなと思います。
業務でプログラムする場合は、クラスのSerializablityや動作想定などを正確に考える必要があるので、QuickStartだけだときついので何日かかけてすべて読む必要があると思います。(実は必要なことが全然書いてなかったりしてプログラム中にハマることが多々ありますが・・・)
パイプラインの基礎
ここはパイプライン開発の流れとそのドキュメントの在処をマップしています。
- 設計:https://beam.apache.org/documentation/pipelines/design-your-pipeline/
- 開発:https://beam.apache.org/documentation/pipelines/create-your-pipeline/
- テスト:https://beam.apache.org/documentation/pipelines/test-your-pipeline/
SDK
- Java
- Python
- Go
が用意されています。
(https://beam.apache.org/documentation/sdks/java/)
ドキュメントの量はJava>Python>>>GoでJavaが優位にみえますね。
Runner
対応している実行環境の話です
- DirectRunner:マシン上でローカルに実行-開発、テスト、デバッグに最適です。
- ApexRunner:Apache Apexで実行されます。
- FlinkRunner:Apache Flinkで実行されます。
- SparkRunner:Apache Sparkで実行されます。
- DataflowRunner:Google Cloud Platform内の完全に管理されたサービスであるGoogle Cloud Dataflowで実行されます。
- GearpumpRunner:Apache Gearpumpで実行(インキュベーション)。
- SamzaRunner:Apache Samzaで実行されます。
- NemoRunner:Apache Nemoで実行します。
- JetRunner:Hazelcast Jetで実行します。
ここはコピペで。
ローカルテストはDirectRunner、それ以外は様々実行環境が用意されているようです。話題なのはDataflowですね。
Runnerを選定する方法
アーキテクチャを組み上げる際は環境の選定をする必要がありますが、ここではそんな話です。
パイプライン自体は様々な環境で利用できますが、環境によって実行できる機能に差があるので、それを考慮する必要があります。
公式の下表がとても良くまとまっています。
https://beam.apache.org/documentation/runners/capability-matrix/
CoreTransformができればさすがに困らないと思いますが、気にしたほうが良さそうですね。
例えばApacheSpark環境だと、GroupByKeyが利用できません。