ポータビリティフレームワークのロードマップ
概要
SDKとランナー間の相互運用性は、Apache Beamの重要な側面です。以前は、各SDKとランナーの組み合わせで両側にかなりの作業が必要だったため、ほとんどのランナーがJava SDKのみをサポートするのが現実でした。また、ほとんどのランナーは現在Javaで記述されているため、Java以外のSDKのサポートはさらにコストがかかります。ポータビリティフレームワークは、この状況を是正し、Beamエコシステム全体で完全な相互運用性を提供しました。
ポータビリティフレームワークは、SDKとランナー間で明確に定義された、言語に依存しないデータ構造とプロトコルを導入します。この相互運用レイヤー(ポータビリティAPIと呼ばれます)は、SDKとランナーが相互に均一に連携できるようにし、SDKとランナーの両方の相互運用性の負担を一定の労力に軽減します。特に、新しいSDKが既存のランナーと自動的に連携し、その逆も同様であることを保証します。このフレームワークでは、直接ランナーを補完する実用的なリファレンス実装として、新しいランナーであるユニバーサルローカルランナー(ULR)が導入されています。最後に、クロスランゲージパイプライン(SDK間でI/Oまたは変換を共有)と、ユーザーがカスタマイズした実行環境(「カスタムコンテナ」)を可能にします。
ポータビリティAPIは、ジョブの送信、管理、実行のためにSDKとランナーを分離する、より小さなコントラクトのセットで構成されています。これらのコントラクトは、幅広い言語サポートのためにprotobufとgRPCを使用します。
ジョブの送信と管理: Runner APIは、実行環境をDockerコンテナイメージとして指定する変換を使用して、言語に依存しないパイプライン表現を定義します。後者は、実行側が適切な環境をセットアップできるようにすると同時に、カスタムコンテナとクロス環境パイプラインへの扉を開きます。Job APIを使用すると、パイプラインの実行と構成を均一に管理できます。
ジョブの実行: SDKハーネスは、ユーザーコードを実行する責任があるSDK提供のプログラムであり、ランナーとは別に実行されます。Fn APIは、実行タスクの管理方法とデータの転送方法を記述する、SDKハーネスとランナー間の実行時のバイナリコントラクトを定義します。さらに、ランナーは、進捗状況と監視を効率的かつ言語に依存しない方法で処理する必要があります。SDKハーネスの初期化は、ステージングされたファイル、パイプラインオプション、および環境情報を取得するためのProvisionおよびArtifact APIに依存しています。Dockerは、コンテナ契約で定義されているように、ランナーとSDK/ユーザー環境間の隔離を提供し、両方にメリットをもたらします。SDKのコンテナ化により、(SDKがクローズされていない限り)SDK(およびユーザー)は、依存関係の競合のリスクなしに、自身の環境を完全に制御できます。ランナーは、SDKハーネスコンテナの管理方法に関して、かなりの自由度を持っています。
目標は、すべての(非直接)ランナーとSDKが最終的に、おそらく排他的にポータビリティAPIをサポートすることです。
設計を詳しく調べたい場合は、Beam開発者向けWikiで確認できます。別の概要はこちらにあります。
ステータス
現在、すべてのSDKがポータビリティフレームワークをサポートしています。また、Pythonユニバーサルローカルランナーと共有Javaランナーライブラリもあります。パフォーマンスは良好で、マルチランゲージパイプラインがサポートされています。現在、FlinkおよびSparkランナーはポータブルパイプラインの実行をサポートしており(Java以外のSDKではデフォルトで使用)、Dataflow Runner v2を使用する場合、Dataflowもサポートしています。詳細については、ポータビリティサポートテーブルを参照してください。
課題
ポータビリティの取り組みはすべてのコンポーネントに影響するため、すべてのポータビリティ関連の問題を特定するために「ポータビリティ」ラベルが使用されます。純粋な設計またはproto定義では、「beam-model」コンポーネントを使用する必要があります。新しいポータビリティ機能の一般的なパターンは、全体的な機能が「beam-model」にあり、各SDKおよびランナーのサブタスクがそれぞれのコンポーネントにあることです。
課題: クエリ
FlinkでPythonのwordcountを実行する
Beam Flinkランナーは、バッチモードとストリーミングモードでPythonパイプラインを実行できます。Flinkでのポータブルパイプラインの実行方法の詳細については、Flink Runnerページを参照してください。
SparkでPythonのwordcountを実行する
Beam Sparkランナーは、バッチモードでPythonパイプラインを実行できます。Sparkでのポータブルパイプラインの実行方法の詳細については、Spark Runnerページを参照してください。
Pythonストリーミングモードは、Sparkではまだサポートされていません。
SDKハーネスの構成
SDKハーネスのデプロイオプションの詳細についてはこちらを、ポータブルSDKの作成内容についてはこちらを参照してください。
最終更新日: 2024/10/31
探しているものはすべて見つかりましたか?
すべて役に立ち、明確でしたか?変更したいことはありますか?ぜひお知らせください!