ブログ
2017/01/09
バージョン0.4.0では、Apache Apexのランナーが追加されました。
最新のリリースであるApache Beamのバージョン0.4.0では、Apache Apexの新しいランナーが追加されました。この最初のマイルストーンに到達できて嬉しく思っており、BeamとApexのコミュニティ間の継続的な協業を通じて、ランナーの進化を期待しています。
BeamはGoogle Dataflow SDKから発展し、インキュベータープロジェクトとしてApacheのやり方を迅速に採用し、コミュニティを成長させ、異なるビッグデータ処理フレームワーク間で移植可能な、概念的に強力で統一されたプログラミングモデルから恩恵を受けたいと考えているユーザーからの関心を高めています(Streaming-101とStreaming-102を参照)。複数のApacheプロジェクトが既にBeam用のランナーを提供しています(ランナーと機能マトリックスを参照)。
Apexは、低レイテンシ、高スループット、ステートフルで信頼性の高い、複雑な分析パイプラインをクラスタ上で処理するためのストリーム処理フレームワークです。Apexは2012年から開発されており、大規模企業がリアルタイムおよびバッチ処理を大規模に運用環境で使用しています。
ランナーの最初の改訂版では、機能レベルでのBeamモデルの幅広いカバレッジに重点が置かれていました。つまり、ランナーを機能的なものから、ApexとそのネイティブAPIの機能に匹敵するスケーラブルで高性能なものにするために、いくつかの分野でフォローアップ作業が行われます。ランナー機能マトリックスは、Apexの機能がBeamモデルとよく一致していることを示しています。具体的には、フォールトトレラントで効率的な方法で計算状態を追跡する機能は、イベント時間に基づく処理を含むウィンドウ化の概念を幅広くサポートするために必要です。
ステートフルストリームプロセッサ
Apexは、ステートフルストリームプロセッサとして最初から構築されました。オペレーターは、全体の処理グラフの一貫性のあるスナップショットを生成する分散型非同期方式で状態のチェックポイントを作成し、これはリカバリに使用できます。Apexは、増分または細粒度の方法でのそのようなリカバリもサポートしています。つまり、障害の影響を受けるDAGの部分のみが復旧され、残りのパイプラインは処理を続けます(これは、処理レイテンシに関するSLAを達成するための投機的実行など、特別なニーズを持つユースケースを実装するために活用できます)。状態チェックポイントとべき等処理保証は、Apexでの正確に一度の結果サポートの基礎です。
Apex DAGへの変換
Beamランナーは、Beamモデルを基盤となるフレームワークの実行モデルに変換する必要があります。Apexの場合、ランナーはパイプラインをネイティブ(構成可能、低レベル)DAG API(これは、Apexで実行されるアプリケーションを指定するために使用できる他の多くのAPIの基礎でもあります)に変換します。DAGはオペレーター(ストリームで接続された機能的な構成要素)で構成されています。ランナーは実行レイヤーを提供します。Apexの場合、それは分散ストリーム処理であり、オペレーターはデータイベントごとにデータを処理します。オペレーターの最小セットには、Beamのプリミティブ変換が含まれます。`ParDo.Bound`、`ParDo.BoundMulti`、`Read.Unbounded`、`Read.Bounded`、`GroupByKey`、`Flatten.FlattenPCollectionList`など。
実行とテスト
このリリースでは、Apexランナーは、直接ランナーと同様に、すべてが単一のJVMで実行される埋め込みモードでパイプラインを実行します。Apexランナーを使用してBeamの例を実行する方法については、クイックスタートを参照してください。
埋め込みモードは、開発とデバッグに役立ちます。運用環境でのApexは、Apache Hadoop YARNクラスタ上で分散して実行されます。BeamパイプラインをApexアプリケーションパッケージに埋め込んでYARNで実行する方法の例はこちらで見つけることができ、ランナーでの直接起動のサポートは現在開発中です。
Beamプロジェクトは、開発プロセスとツール(テストを含む)に重点を置いています。ランナーには、変更を加えたときにランナーが壊れないようにするために、各ランナーに対して実行される200を超える統合テストを含む包括的なテストスイートがあります。テストはマトリックスの機能を網羅しているため、ランナー実装の完全性と正確性の尺度となります。このスイートは、Apexランナーの開発に非常に役立ちました。
展望
次のステップは、Apexランナーを機能的なものから、ネイティブAPIと同様に、Apexのスケーラビリティとパフォーマンス機能を活用する、分散して実行される実際のアプリケーションの準備が整うようにすることです。これには、ParDoのチェーン化、パーティショニング、結合操作の最適化などが含まれます。参加するには、JIRAを参照して、Beamコミュニティに参加してください。