FLINKデータ交換は、以下の方針に基づいて設計されています:
制御フロー(すなわち、送信メッセージの交換を開始する)1.データ交換は、受信機によって開始される、元のMapReduceと同じ。
2.データ交換、ケーブルを介して、すなわち、実際のデータ伝送のためのデータストリームを、IntermediateResultに抽象化し、プラガブルです。これは、システムが同じ実装でも、ストリーミングデータ転送とバッチデータ伝送をサポートして使用できることを意味します。
:データ交換も含めた役割の数に関与しています
1.JobManager、タスクスケジューリングを担当するマスターノード、異常からの回復、タスクの調整、およびデータ構造などExecutionGraphによってジョブパノラマを保存します。
2.TaskManagers、ワーキングノード、並列スレッドで複数のタスクを実行する責任があり、各々が(タスク間で共有)通信マネージャ(TM)とMemoryManagerを含む(タスク間で共有されます)。TCPを介したTMデータ接続の間の相互作用。
FLINKで、データ交換をTMとしないタスクとの間で、同じマルチプレックス(TM)内の異なるタスクが同一のネットワークに接続される間に生じることに留意されたいです。
ExecutionGraphは、ジョブの計算に関する情報が含まれているデータ構造の実行「基本的な事実を。」これは、生成された頂点タスク(ExecutionVertex)タスクデータ(IntermediateResultPartition)組成物を表現する計算の中間結果を表します。それらはExecutionEdges(EE)を消費する結果により中間頂点に連結されました:
これらは、論理的なデータ構造JobManager存在しています。彼らは、これらのデータ構造上の実行時に相当する構造、実際の処理責任タスクマネージャを持っています。ResultPartition IntermediateResultPartition時間と呼ばれる操作に相当します。
ResultPartition(RP)は、すなわち、単一のタスクによって生成され、BufferWriter書き込まれたデータブロックを示しています。RPは、子パーティション(RS)の結果のコレクションです。これは、例えば、別の受信者に送信されるデータを区別低減または場合パーティション洗浄混合物に参加することです。
ResultSubpartition(RS)が操作者によって作成されたデータのパーティションを表し、そしてロジックはオペレータで受信したデータを転送します。RS特定の実装では、システムは、様々なデータ伝送プラグ可能な機構をサポートできるようにすることである実際のデータ転送ロジックを決定します。例えば、PipelinedSubpartition支持パイプフローデータ交換。SpillableSubpartitionは停止実装で、大量のデータ交換をサポートしています。
InputGate:RP受信者の論理的同等。これは、データバッファを収集し、上流に転送する責任があります。
InputChannel:側の論理的同等を受けRS。特定のパーティションにデータバッファを収集するために責任があります。
シリアライゼーションおよびデシリアライゼーションは、元のバイトバッファに確実の種類を記録し、その逆、複数のバッファなどを横切って記録するプロセスであろう。
データ交換のための制御フロー
絵は、単純な2つの並列タスクとジョブをマップ-減らす表します。私たちは、第3のノードに2つのタスクマネージャ、二つのタスク(タスクマップおよび削減タスク)2つの異なるノードで実行して、JobManagerの実行を持っています。私たちは、M1とR2の転送開始の間の作業に特化。太い矢印を使用して、細い矢印はメッセージを表す用い、データ伝送を示しています。まず、M1はResultPartition(RP1)を(矢印1)を生成します。(我々は後で説明します)消費のために利用できるRPは、それはJobManagerを通知しますとき(矢印2)。パーティションの意図された受信者のパーティション(タスクR1およびR2)を気づかJobManagerする準備ができています。あなたは一人の受信者を予定していない場合は、実際には、展開タスクをトリガーする(矢印3A、3B)。次いで、受信機は、データRP(矢印4aおよび4b)を要求します。これは、ローカル(ケース5a)または(5b)は、データ送信のTaskManagersネットワークスタックタスクによって開始(矢印5aおよび5b)の間です。RPは、その可用性JobManagerを通知することを決定したとき、プロセスはある程度の自由度を有します。事前通知RP1 JM自体が完全に生成された(およびファイルに書き込まれていてもよい)場合、例えば、データ交換がほぼ同等量のHadoopの実施交換です。RP1はすぐに最初のレコードの生成後JMを通知した場合、我々は、データ交換をストリーミングすることができるようになります。
2つのタスク間のバイトのバッファの転送
バイナリ表現にシリアライザ記録シーケンス、およびそれらの固定サイズのバッファ(複数のバッファを横切って記録する)に置きます。これらのバッファとBufferWriterに引き渡さとResultPartition(RP)に書き込みます。特定のユーザのコレクションパーティションにサブバッファで構成RPいくつかの子パーティション(ResultSubpartitions-RS)。図面では、第2のバッファは、(タスクマネージャ2)減速機に送られ、RS2に入れました。これはバッファので、利用可能なRS2あるので(この現象は、流れ分布を達成することに留意されたい)、およびJobManagerを通知します。
JobManager RS2は、ユーザを見つけ、およびTaskManager 2使用可能なデータブロックを通知します。このバッファにダウン伝播する送信TM2メッセージは順番に送信RS2を開始することができるネットワークに通知InputChannelを受けるべきです。次に、RS2は、順番に網状に輸送するために引き渡さバッファTM1ネットワークスタックに転送されます。Fiは長時間実行され、代わりに個々のタスクの間、タスクマネージャの間にあります。
(複数のICを含む)InputGate到着し、最後に再cordDeserializerの端部にInputChannel(受信側IRPQに相当)から出発して、同様のオブジェクト階層を通過するバッファTM2を受け取ると、からレコードバッファの生成の種類、及び、この場合ReduceDriverにタスクを受信します。