Flink環境オブジェクト

序文

この記事はコラム「ビッグデータ技術体系」に属しています。このコラムは著者によるオリジナルです。引用する場合は出典を明記してください。不足点や誤りがあればコメント欄でご指摘ください。よろしくお願いします。

このコラムのディレクトリ構造と参照先については、ビッグデータ技術システムを参照してください。


マインドマッピング

ここに画像の説明を挿入します


概要

StreamExecutionEnvironment は Flink アプリケーション開発で使用される概念です。ストリーム コンピューティング ジョブの実行環境を表します。ジョブ開発のエントリ ポイント、データ ソース インターフェイス、DataStream の生成と変換用のインターフェイス、データ シンク用のインターフェイス、ジョブ構成インターフェイス、ジョブの開始と実行のエントリ ポイント。

環境は、StreamExecution 環境の構成情報から派生したランタイム ジョブ レベルの概念です。

Flink ジョブを実行する場合、ジョブには、ジョブ名、並列処理、ジョブ番号、ジョブ ID、監視対象メトリック、フォールト トレランス構成情報、IO などの関連構成情報が必要です。StreamExecutionRuntime オブジェクトの使用は適切ではありません。多くの API は必要ないため、環境は実行時のコンテキスト情報として Flink で抽象化されます。

RuntimeContext は、ランタイム タスク インスタンス レベルの概念です。

環境自体はまだ比較的大まかなジョブ レベルの構成です。タスクごとに、より詳細な構成情報があるため、Flink は RuntimeContext を抽象化します。各タスク インスタンスには独自の RuntimeContext があります。RuntimeContext の情報は、実際には構成の合成です。 StreamExecutionEnvironment の情報とオペレーターレベルの情報。

3 つの環境オブジェクトの関係を次の図に示します。

ここに画像の説明を挿入します

開発者にとって、StreamExecutionEnvironmentはジョブ開発のMain機能で使用され、RuntimeContextはUDF開発で使用され、EnvironmentはStreamExecutionEnvironmentとRuntimeContextを接続する役割を果たします。


実行環境(StreamExecutionEnvironment)

ここに画像の説明を挿入します

実行環境はFlink ジョブの開発と実行の入り口です。Flink のバッチ ストリーム API の現在のバージョンは統合されていないため、実行環境にはストリーム コンピューティング (StreamExecutionEnvironment) とバッチ処理 (ExecutionEnvironment) の 2 つのセットがあります。

StreamExecutionEnvironment は、Flink ストリーム コンピューティング アプリケーションの実行環境です。Flink ジョブの開発と起動実行のための母集団です。開発者は、StreamExecutionEnvironment の実装を認識しません。

1.ローカルストリーム環境

マルチスレッドを使用して単一の JVM でFlink クラスターをシミュレートするローカル実行環境

通常、ローカル開発とデバッグに使用されます。Idea などの IDE ツールを使用すると、コード内でブレークポイントのデバッグや単体テストをより簡単に設定できます。テストで問題がなければ、実際の運用クラスターに送信できます。

作業過程

  1. Flink ジョブの Main 関数を実行して StreamGraph を生成し、JobGraph に変換します。
  2. タスクを実行するための構成情報を設定します。
  3. 設定情報に従って、対応する LocalFlinkMiniCluster を起動します。
  4. 構成情報と miniCluster に基づいて、対応する MiniClusterClient を生成します。
  5. MiniClusterClient を通じて JobGraph を MiniCluster に送信する

2. リモートストリーム環境

大規模データセンターに導入された Flink は、クラスター実行環境を生成します。

Flink クラスターにジョブを公開する場合は、RemoteStreamEnvironment を使用します

作業過程

  1. Flink ジョブの Main 関数を実行して StreamGraph を生成し、JobGraph に変換します。
  2. タスクを実行するための構成情報を設定します。
  3. JobGraph をリモート Flink クラスターに送信します。

3. StreamContext環境

これは、Cli コマンド ラインまたは単体テスト使用されます。実行手順は上記と同じです。

4. ストリームプラン環境

Flink Web UI管理インターフェイスでジョブを視覚的に表示する場合、実行プラン (実際には StreamGraph) を生成するために特別に使用されます。

5. ScalaShellStream環境

これは、コマンド ラインで Flink ジョブを対話的に開発できる Scala シェル実行環境です。

作業過程

  1. デプロイメント モードを確認する 現在、Scala Shell はアタッチ モードのみをサポートしています。
  2. 各ジョブに必要な Jar ファイルをアップロードします。

残りの手順は RemoteStreamEnvironment と同様です。


実行環境(環境)

ここに画像の説明を挿入します

実行環境は、Flink ランタイムの概念である Flink では環境と呼ばれ、静的構成やスケジューラーのスケジューリング後に生成される動的構成情報など、実行時にタスクに必要なすべての構成情報を定義します。

環境には、RuntimeEnvironment と SavepointEnvironment の 2 つの実装クラスがあります。

1. 実行環境

タスクの実行開始時に初期化され、実行中のタスクに関連するすべての情報がオブジェクトにカプセル化されます。以下のコード リストに示すように、構成情報だけでなく、さまざまなランタイム サービスもパッケージ化されます。

ここに画像の説明を挿入します

2. セーブポイント環境

SavepointEnvironment は、Environment の最小限の実装であり、状態プロセッサ API で使用されます。Flink 1.9 の魅力的な状態プロセッサ API は、この状況を真に変え、アプリケーション状態の操作を実装しました。

この機能は、データセット API を使用して入力および出力形式を拡張し、セーブポイントまたはチェックポイント データを読み書きできるようにします。

DataSet と Table API 間の相互運用性により、ユーザーはリレーショナル テーブル API や SQL クエリを使用してステータス データを分析および処理することもできます。


ランタイムコンテキスト

ここに画像の説明を挿入します

RuntimeContext は Function 実行時のコンテキストであり、Function の実行時に必要になる可能性のあるすべての情報をカプセル化することで、Function が実行時に並列処理関連情報、タスク名、実行構成情報 (ExecutionConfig)、状態、
など。

Function の各インスタンスには RuntimeContext オブジェクトがあり、RichFunction の getRunctionContext() を通じてアクセスできます。

以下で詳しく説明するように、さまざまな使用シナリオにはさまざまな RuntimeContext があります。

  1. StreamingRuntimeContext: ジョブ情報、ステータスなどにアクセスするためにストリーム コンピューティング UDF で使用されるコンテキスト。
  2. DistributedRuntimeUDFContext: ランタイム UDF が配置され、データセットのバッチ処理で使用されるバッチ オペレーターによって作成されます。
  3. RuntimeUDFContext: バッチ アプリケーションの UDF で使用されます。
  4. SavepointRuntimeContext: Fink バージョン 1.9 では、非常に重要な状態処理 API が導入されており、このフレームワークは、読み取り、変更、書き込みなど、チェックポイントとセーブポイントの操作をサポートしています。
  5. CepRuntimeContext: CEP 複合イベント処理で使用されるコンテキスト。

さらに、一部のシナリオでは、RuntimeContext 内の情報を完全に公開する必要はなく、情報の特定の部分のみが必要であるか、RuntimeContext の外部にある他の情報を使用する必要があります。再度カプセル化されます。


要約する

Flink の環境オブジェクトは 3 つのタイプに分類できます。

1. 実行環境(StreamExecutionEnvironment)

実行環境はFlink ジョブの開発と実行への入り口であり、現在のバージョンにはストリーム コンピューティング用の StreamExecutionEnvironment とバッチ処理用の ExecutionEnvironment が含まれています。実行環境は、データ ソースの定義、DataStream の生成と変換、データ シンクの構成、ジョブ構成情報の設定など、ジョブ開発中のさまざまな機能を担当します。一般的な実行環境には、LocalStreamEnvironment (ローカル マルチスレッド シミュレーション)、RemoteStreamEnvironment (リモート クラスター) などが含まれます。

2. 実行環境(環境)

実行環境とはジョブ実行時の概念であり、静的構成や動的構成など、タスクの実行に必要なさまざまな構成情報が含まれますこれは実行環境の構成から派生し、実行環境よりも詳細な環境情報を提供します。Flink には、RuntimeEnvironment と SavepointEnvironment という 2 つの主なランタイム環境実装があります。前者にはタスク実行時のさまざまなサービスと構成情報が含まれ、後者はステータス プロセッサ API の合理化バージョンです。

3. ランタイムコンテキスト (RuntimeContext)

ランタイムコンテキストは、ジョブの並列処理、タスク名、実行構成、ステータスなど、関数インスタンスの実行時に必要なさまざまな情報をカプセル化します。各関数インスタンスには、対応するランタイム コンテキスト オブジェクトがあります。Flink は、ストリーム コンピューティング用の StreamingRuntimeContext、バッチ処理用の DistributedRuntimeUDFContext など、さまざまな使用シナリオに基づいたさまざまなコンテキストを提供します。

3 つのうち、実行環境はランタイム環境を生成し、ランタイム コンテキストは 2 つの情報を統合します。実行環境は開発フェーズに使用され、ランタイム コンテキストは関数開発に使用されます。

この 3 つは明確な役割分担を持ち、さまざまな粒度の環境情報を合理的にカプセル化し、タスクの開発、実行、監視をサポートします。

おすすめ

転載: blog.csdn.net/Shockang/article/details/132914872