本稿では、主にFlink Runtimeにおけるジョブ実行のコアメカニズムについて紹介します。最初に、Flink Runtimeの全体的なアーキテクチャとジョブの基本的な実行プロセスを紹介し、次にFlinkのスタンドアロン実行アーキテクチャを紹介します。
Flinkランタイムジョブ実行フロー解析
全体アーキテクチャ
Flinkランタイムレイヤーの主要なアーキテクチャは以下の図に示されており、Flinkクラスタの基本構造を示しています。全体として、標準的なマスター-スレーブ構造を採用しており、マスターはクラスタ内のリソースとジョブの管理を担当し、TaskExecutorは特定のリソースの提供と実際のジョブの実行を担当するスレーブです。
実行プロセス分析
コンポーネント
Dispatcherはユーザーからジョブを受け取り、新しく投入されたジョブに対して新しいJobManagerコンポーネントを引き出します。ResourceManagerはリソースの管理を担当し、Flinkクラスタ全体で1つのResourceManagerしか存在しません。 JobManagerはジョブの実行管理を担当し、Flinkクラスタ内で複数のジョブが同時に実行されることがあり、それぞれにJobManagerコンポーネントが存在します。3つのコンポーネントはすべて AppMaster プロセスに含まれています。
TaskManagerは主に特定のタスクの実行を担当し、StateBackend 主に状態のチェックポイントに使用されます。
クラスタマネージャは、スタンドアロン、YARN、K8sなどのクラスタマネージャです。
プロセス分析
1.ユーザーがジョブを投入すると、投入スクリプトは最初にジョブのコンパイルと投入を担当するクライアントプロセスを開始します。最初にユーザが書いたコードをJobGraphにコンパイルし、この過程で、どのオペレータを同じタスクに連鎖させることができるかを決定するなど、いくつかのチェックや最適化も実行します。そしてクライアントは結果のJobGraphをクラスタに送信して実行させます。この時点で、2つのケースがあります。1つはスタンドアロンセッションモードに似ていて、AMは事前に開始されます。もう1つはPer-Jobモードで、AMは事前に開始されません、この時点で、クライアントは、まずAMを起動するリソース管理システムからリソースを要求し、AMのディスパッチャにジョブを提出します。
2.ジョブがDispatcherに届くと、DispatcherはまずJobManagerコンポーネントを起動し、次にJobManagerがResourceManagerにリソースを要求して、ジョブ内の特定のタスクを開始します。セッションモードであれば、TaskManager は既に起動しているので、リソースを直接割り当てることができます。ResourceManagerはTaskExecutorを起動するために外部のリソース管理システムにリソースを申請し、TaskExecutorが対応するリソースを登録するのを待ちます。JobManagerはTaskExecutorによって登録されたスロットを受け取った後、実際にタスクを投入することができます。
3. TaskExecutorはJobManagerから提出されたタスクを受け取り、タスクを実行するために新しいスレッドを開始します。
Flink Standaloneオペレーション・アーキテクチャ
Flink Standaloneランタイムのアーキテクチャを以下に示します:
JobManager: ジョブのスケジューリング、タスクの調整、コミュニケーション、リソースのリクエスト。
TaskManager: 特定のタスクの実行、リソースの要求
Flink On YARNオペレーション・アーキテクチャ
Per-Job
Per-jobモードでは、Flinkクラスタ全体が1つのジョブを実行します。つまり、各ジョブはDispatcherとResourceManagerコンポーネントに排他的にアクセスできます。また、Per-job モードでは、AppMaster と TaskExecutor はオンデマンドで要求されます。したがって、Per-jobモードは、実行時間の長い大規模なジョブの実行に適しており、高い安定性が要求され、リソースの要求時間に影響されません。1.排他的ディスパッチャとリソースマネージャ
2.オンデマンドでのリソース要求
3.実行時間の長い大規模オペレーションに最適
Session
セッションモードでは、FlinkはAppMasterとTaskExecutorのセットを事前に起動し、クラスタの寿命が尽きるまで複数のジョブを実行します。セッションモードは実行時間の短い小規模なジョブに適しています。
1.共有DispatcherとResourceManager
2.共有リソース
3.小規模で実行時間の短い業務に適しています。
参考
[1]
[2]
公共ビッグデータ技術とデジタルウェアハウス、ビッグデータ情報パッケージを取得するための情報に返信します。