blog

第1回|Flink実行アーキテクチャ分析

本稿では、Flink Runtimeにおけるジョブ実行のコアメカニズムについて紹介します。まず、Flink Runtimeの全体的なアーキテクチャとジョブの基本的な実行プロセスを紹介し、次にFlink...

Dec 28, 2020 · 3 min. read
シェア

本稿では、主に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]

公共ビッグデータ技術とデジタルウェアハウス、ビッグデータ情報パッケージを取得するための情報に返信します。

Read next

これらの66のCSS特殊効果を学ぶために4ヶ月以上!

CSSの評価については、フォーラムや人々の周りかどうか、私は最もCSSを学ぶことであると聞いたこれらの空想は役に立たない、実際のプロジェクトと使用することはできません。この心を聞いて、まだ非常に不満である、時には私は自分自身を疑う、私の学習の方向性は間違っていません。しかし、いくつかのプロジェクトで必要

Dec 28, 2020 · 8 min read