1. FLINKランタイムコンポーネント
ジョブマネージャ(JobManager)
タスクマネージャ(タスクマネージャ)
リソースマネージャ(のResourceManager)
ディストリビュータ(ディスパッチャ)
2.ジョブの投入方法
FLINKジョブ提出した後、クライアントJARパッケージと構成がタスク糸のResourceManagerに提出した後、HDFSにFLINKをアップロードします。
コンテナのResourceManagerがリソースを割り当てられ、対応する出発ノードマネージャに通知ApplicationMaster、ジャーパッケージの読み込みの設定をしてApplicationMaster環境を構築し、次に起動した後FLINKが開始JobManagerを ApplicationMasterのResourceManagerが起動アプリケーション・リソースの後に、タスクマネージャをした後、のResourceManagerコンテナリソース割り当て;
リソースがノードで通知ApplicationMaster タスクマネージャを開始ノードマネージャ、ノードマネージャのロード構成とFLINKジャーパッケージをビルド環境タスクマネージャを起動し、リアには、タスクマネージャを起動し、ハートビートパケットJobManagerを送信し、待機中のJobManagerは、タスクを割り当てます。
3.原則タスクのスケジューリング
ないプログラムのクライアントランタイムと実行の一部が、それを準備するために使用される、マスター(JobManager)にデータフロー(JobGraph)を送信し、クライアントが接続を切断するか、接続を維持するために、計算結果を受け取るために待っています。
FLINKクラスタが起動すると、最初はスタートしますJobManger との一つ以上のタスクマネージャを。することにより、クライアント JobManager、JobManagerにタスクを送信してから実行するために、各タスクマネージャにタスクをスケジュールし、タスクマネージャはJobManagerに心拍や統計情報を報告します。ストリームの形式との間のデータ伝送のためにタスクマネージャ。上記の3つがある独立したJVMプロセス。
クライアント ジョブのクライアントの提出は任意のマシン上で実行することができます(と環境がJobManagerを伝達することができます)。ジョブ投入後、クライアントが終了し、返される結果を待たないかもしれプロセス(ストリーミングタスク)を終了しても良いです。
JobManagerは ずっとストームニンバスの役割のように、スケジューリングおよびジョブタスクのチェックポイントを行う調整する責任を負います。ジョブJARパッケージおよびその他のリソースへのクライアントから受け取った後、それが最適化された実行計画を生成し、タスクマネージャを実行するために各部にタスクをスケジュールします。
タスクマネージャ の起動時には、スロット(スロット)の数を設定するために、各スロットは、タスク、タスクスレッドを開始することができます。展開はその上流ネッティーとの接続を確立するために開始した後、JobManagerタスクを展開する必要性から受信し、受信したデータを処理します。
図の実行:
:FLINKは、4つの層に分かれていてもよい実行> JobGraph - - > ExecutionGraph - >物理的実行図StreamGraph。
StreamGraph:図調製最初のストリームAPIを介してユーザに係る生成されたコード。トポロジは、プログラムを表すために使用されます。
JobGraph:StreamGraphは、最適化されたエピジェネティックはJobManagerのデータ構造に提出し、JobGraphになりました。修飾ノードの複数のメイン最適化、 ノードとして一緒にチェーン従ってシリアライズ/デシリアライズ/転送消費に必要なノード間のデータの流れを減少させます。
ExecutionGraph:JobManager JobGraphに応じExecutionGraph生成します。ExecutionGraph JobGraphの並列バージョン、コア層は、データ構造をスケジュールされています。
物理的な実行:ジョブスケジューリングに従ってExecutionGraph後JobManagerではなく、具体的なデータ構造の展開タスク、後に形成された各タスクマネージャの「マップ」。
タスクマネージャ和スロット
FLINK各タスクマネージャはスタンドアロンJVMプロセスは、それが別のスレッドであってもよい一つまたはそれ以上のサブタスクを実行します。
タスクマネージャタスクを受け取るの数を制御するために、タスクマネージャは、(スロットは、少なくとも一つのタスクマネージャを有する)タスクスロットによって制御されます。
表現タスクマネージャリソースと各タスクスロット固定サイズのサブセット。3タスクマネージャスロットが存在する場合、それは、各スロットに3つの部分に分割され、そのメモリを管理します。手段のリソーススロットは、他の仕事からの競争にサブタスクサブタスクを必要としない管理メモリであり、メモリ準備金の一定量とそれを置き換えます。CPUの単離関与していないことに留意すべきである、現在のみ管理するメモリタスクを分離するために使用されるスロットを。
タスクスロットの数を調整することにより、ユーザは互いにサブタスクからどのように単離された定義することを可能にします。タスクマネージャスロット場合、それはながら、各タスクグループは、別々のJVM(特定のコンテナによって開始することができるJVM)で実行されることを意味する複数のタスクマネージャスロットが複数のサブタスクが同一を共有できることを意味しますJVM。JVMプロセスで同じタスクを共有するが、TCP接続(ベース多重化)とハートビートメッセージ。彼らはまた、このようにして、各タスクの負荷を低減する、データセットおよびデータ構造を共有することができます。
デフォルトでは、FLINKは、彼らが異なるタスクのサブタスクであっても、サブタスク共有スロットを許可します。その結果、スロットがパイプライン全体のジョブを保持することができるということです。
タスクスロットは、タスクマネージャを参照するには、同時実行能力を持っている、静的な概念です。パラメータは、することができtaskmanager.numberOfTaskSlots設定。
並列の並列処理は、動的な概念、すなわち、タスクマネージャで実際にプログラムを実行する際に使用される同時容量、パラメータがあってもよいparallelism.default構成。
これは、3 TaskSlot我々はparallelism.default = 1を設定した場合、つまり、各タスクマネージャは3つのタスク、9 TaskSlotの合計を受け取ることができる、つまり、各タスクマネージャを割り当てるプログラムのデフォルトを実行3タスクマネージャの合計を想定し、あります従って、効率を向上させるために並列の適切な度合いを設定1,9並列TaskSlot 1の一方のみ、8アイドル。
プログラムとデータの流れ
:すべてのFLINKプログラムは3つの部分から構成され 、ソース、変換、およびシンク。
- データソースを読み込むための責任ソースは、形質転換は、様々な処理演算子を使用して処理された出力を担当するシンク。
- 実行時には、FLINK上で動作するプログラムはにマッピングされるストリーミング論理データフローデータフロー三つの部分が含まれています、。
- 各データフロー1つまたは複数のソースには、一台の以上のシンクので開始し終了。任意の有向非巡回グラフ(DAG)のようなデータフローは、リングの特定の形態は、反復することによって構築てもよいことは勿論です。
- ほとんどの場合、データフローのオペレータとプログラム変換は1対1の関係にあるが、時には、変換は、複数のオペレータに対応することができます。
並列データストリーム
FLINK実行プログラムを有する平行な、分散特性を。実行時に、ストリームは、一つ以上のストリームパーティションを備え、それぞれが一つ以上のオペレータサブタスクオペレータ、異なるスレッドにオペレータサブタスク、異なる物理マシンまたは異なる容器を含むている実装するために、互いに依存しません。
特定のオペレータは、サブタスクと呼ばれる多数の並列(平行度)。ストリームは、常にその生産オペレーター並列に等しい並列度です。プログラムは、さまざまなオペレータは並列の異なる程度を有することができます。
オペレータとの間のデータのストリーム送信モードは、特に、オペレータの種類に応じて、フォームを再配布のモードであってもよい(転送)一対一の形態であってもよいです。
一対一の①:ストリーム(ソースおよびマップオペレータとの間など)パーティションと要素の順序を維持します。サブタスクを意味サブタスク生産要素のソースオペレータと数および順序番号が同じ順序の要素、マップ、fliter、flatMap及び他のオペレータ一対一の間のすべての対応マップ演算子を参照します。同様の火花狭い依存
②再配布:(keyBy /窓付き)(シンクマップの間で、今の間またはkeyBy /ウィンドウ)パーティションは、ストリームを変更します。選択された送信データの変換異なる宛先への各オペレータサブタスク基づいサブタスク。例えば、keyBy()ベースのハッシュコードの再分割、ブロードキャストおよび再パーティションランダムにリバランス、これらの演算子は、再配分プロセスの原因となり、プロセスがシャッフルスパークプロセスを再配布するのと同様です。スパーク同様の幅依存性
タスクチェーン
FLINKは、タスクチェーン、ローカル通信オーバーヘッドは、特定の条件下で還元することができると呼ばれる最適化技術を使用します。タスクチェーンの要件を満たすために、並列処理の同じ程度に二つ以上の演算子でなければなりません、
そして、ローカル(ローカルフォワード)接続方法を介して転送。FLINKそう連結オペレータタスクを形成するために一緒に接続された並列一対一の動作と同じ程度は、元のオペレータは、サブタスクの内側となります。
並列同程度と一対一の動作は、2つの条件が不可欠です。
並列の同程度の一から一回の操作は、タスクを形成するために一緒に接続されたオペレータFLINKそのようなリンクは、元のオペレータは、サブタスクの内側となります。リンク最適化タスクのオペレータは、非常に効率的である:それはリフトスループット遅延を低減しつつ、データ交換バッファ領域に基づいて、スレッド間の切り替え減少します。リンク動作は、プログラミングAPIで指定することができます。