Flink on Yarnには、2つの実行方法があります。1つはセッションクラスターモードで、もう1つはプレジョブクラスターモードです。
Flink On Yarnは、2つの方法でタスクを実行します
フリンクセッション(セッションクラスター)
- 一元化されたメモリ管理モード:YarnでFlinkクラスターを初期化し、指定されたリソースを開いてから、このFlinkヤーンセッションでFlink Jonを送信します。つまり、送信されたジョブの数に関係なく、これらのジョブは最初のリソースでヤーンを共有します。でリクエストされました。このFlinkクラスターは、手動で停止しない限り、Yarnクラスターに存在します。
- ヤーンでデーモンを起動して複数のジョブを開始します。つまり、アプリケーションマスターを起動して複数のジョブを管理します。
- このモードは、yarn-session.sh(リソース開発)+ flink run(タスクの送信)の2つのステップに分かれています。
./yarn-session.sh -n 4 -jm 1024 -tm 5120 -s 5 -nm yarn-session-jobs -d
パラメータの説明:
- -n:タスクマネージャーの数を指定し、タスクマネージャーの数を指定します
- -jm:ジョブマネージャーが占有するメモリの量(MB単位)
- -tm:各タスクマネージャーが占有するメモリをMB単位で指定します
- -s:各タスクマネージャーが使用できるCPUコアの数を指定します
- -nm:アプリケーションの名前を指定します
- -d:バックグラウンドで開始し、セッションが開始された後、プロセスが閉じられます
起動プロセスの説明:
- セッションの開始後、yarnは最初にコンテナを割り当ててAPPマスターとジョブマネージャを開始します。占有メモリは-jmで指定されたメモリサイズであり、CPUは1コアです。
- ジョブを開始する前に、jobmanagerはtaskmanagerを開始しません(jobmanagerは、ジョブの並列度、つまり占有スロットに応じてタスクマネージャーを動的に割り当てます)
- APPマスターにタスクを送信する
./flink run -p 3 -yid application_id -d -c com.xxx ~/jar/xxx-1.0-SNAPSHOT.jar
指定されたAPPマスターへのジョブを開始するために使用されます
注:ジョブパラメーターは-cの前に書き込む必要があります。そうしないと、指定されたパラメーターは機能しません。
パラメータの説明:
- -p:タスクの並列度を指定します。プログラムコードで並列度を指定した場合、ここでの並列度パラメーターは効果がありません。
- -yid:タスクが送信されるapplication-idを指定します。デフォルトは、このノードに送信された最新のアプリケーションです。
- -c:ジョブのメインエントランス+ jarパス
フリンク実行(ジョブクラスターごと)
単一のジョブを開始し、それをヤーンクラスター、つまり単一のジョブと単一のセッションに送信して、完全なリソースの分離を実現します。
ジョブを開始するコマンドは、yarn-sessionのコマンドとは異なります。-myarn-clusterを指定することにより、パラメーターはセッションと比較して-yになります。
./flink run \
-m yarn-cluster \
-yn 2 \
-yjm 1024 \
-ytm 3076 \
-p 2 \
-ys 3 \
-yD name=hadoop \
-ynm RTC_KB_FLINK_TEST \
-yqu rt_constant \
-c com.kb.rt.Test02 ~/jar/kb-1.0-SNAPSHOT.jar
パラメータの説明:
- -m:yarn-clusterは、単一のセッションを開始し、単一のジョブを送信することを意味します
- -yn:タスクマネージャーの数
- -yjm:jobmanagerのメモリ使用量
- -ytm:各タスクマネージャーのメモリ使用量
- -ys:各タスクマネージャーが使用できるCPUコアの数
- -ynm:アプリケーション名
- -yqu:ジョブキューの名前を指定します
- -c:プログラムのメインエントランス+ jarパス
- -p:タスクの並列度を指定します
- -yD:動的パラメータ設定
タスク提出プロセス
- flink-clientはタスクをyarnに送信し、依存するすべてのjarと構成をhdfsにアップロードします
- ResourceManagerからリソースを申請するために、ResourceManagerには主にApplicationManagerとresourceSchedulerの2つの部分が含まれています。
- ApplicationManagerはApplicationMasterを起動し、ResourceSchedulerはApplicationMasterの実行に必要なコンテナを割り当てます。
- ApplicationMasterでFlinkのJobManagerを起動し、ポーリング方式でResourceManagerからRPCを介してリソースを申請します。
- ResourceManagerはリクエストを受信すると、対応するコンテナを割り当てて、将来TaskManagerを開始し、対応するjarと設定をhdfsからダウンロードします。
- ApplicationMaterは、タスクを開始するために対応するコンテナを必要とします。
- 対応するJobManagerとTaskManagerが開始されます。
Flinkリソース管理
オペレーターチェーン
データフロー処理プロセス全体で、演算子としても理解できる多くの演算子があります。隣接する演算子の間には一定の関係があります。隣接する演算子を接続してチェーンを形成することは、flinkの効率的な分散コンピューティングの鍵です。スイッチングを減らすことができます。スレッドとメッセージのシリアル化および逆シリアル化の間。
ono-to-oneストリーム:ソースとマップの間では、パーティションの変更やパーティション間のデータ交換はありません。
ストリームの再配布:マップとキーバイ/ウィンドウ間、およびキーバイ/ウィンドウとシンク間で、パーティション間またはパーティション数のデータ交換に変更があります。
スロット
-
スロットは通常、タスクマネージャーの固定リソースサブセットまたはスレッドを指します。タスクマネージャに3つのスロットがある場合、各スロットはメモリホスティングの1/3を管理します。
-
スロットが存在するため、メモリリソースはメモリ競合を起こさず、スロットはメモリを分離しますが、CPUは分離されないことに注意してください
スロットと並列処理は異なります。スロットは静的な概念です。つまり、タスクマネージャーは並列で実行できます。並列処理は、プログラムが実行されたときにのみ意味があります。動的な概念であり、プログラムの実際の使用を指します。並行性能力ですが、2つは関連しています。並列処理は、スロットの数より大きくすることはできません。
共有スロット:SlotSharingGroupおよびCoLocationGroup
デフォルトでは、サブタスクがすべて同じジョブからのものであり、同じSlotSharingGroupを持つ異なるタスクのサブタスクを持っている場合、Flinkはサブタスクがスロットを共有することを許可します(デフォルト名はデフォルトです)。次に、異なる名前のタスクのサブタスクがスロットで共有されるため、スロットには完成したパイプラインを保持する機会があります。したがって、デフォルトのスロット共有の場合、ジョブの起動に必要なスロットの数は、ジョブ内のオペレーターの最大並列処理に等しくなります。
上の図は、図の左下隅に示されているsource-map-reduceモデルジョブです。ここで、sourceとmapの並列処理は4で、reduceの並列処理は3です。各円はサブタスクを表し、ジョブ全体でのオペレーターの最大並列処理は4です。タスクが実行のために送信された場合、ジョブには4つのスロットが必要であることがわかります。ジョブが2つのtaskManagerに送信された場合、各タスクマネージャーは図の右側に示されているように、3つのスロットがあります。そのうちの3つのスロットには、完全なsource-map-reduceモデルを備えたパイプラインがあります。ただし、データシャッフルのプロセスは描画されません。
上の図には、source-map、keyBy / window / apply、sinkのモデルジョブが含まれています。ここで、source-mapの並列処理は6、keyBy / window / applyの並列処理は6、sinkの並列処理は1です。送信にはジョブが必要です。6つのスロットがあります。割り当て後、左側の最初のスロットには3つのサブタスクを実行する完全なパイプラインがあり、残りの5つのスロットはそれぞれこれらの2つのサブタスクを実行し、最後にデータがシンクに送信されます。出力。
フリンク実行パラメーター
参数说明
Action "run" compiles and runs a program.
Syntax: run [OPTIONS] <jar-file> <arguments>
"run" action options:
-c,--class <classname> Class with the program entry
point ("main" method or
"getPlan()" method. Only
needed if the JAR file does
not specify the class in its
manifest.
-C,--classpath <url> Adds a URL to each user code
classloader on all nodes in
the cluster. The paths must
specify a protocol (e.g.
file://) and be accessible
on all nodes (e.g. by means
of a NFS share). You can use
this option multiple times
for specifying more than one
URL. The protocol must be
supported by the {
@link
java.net.URLClassLoader}.
-d,--detached If present, runs the job in
detached mode
-m,--jobmanager <host:port> Address of the JobManager
(master) to which to
connect. Use this flag to
connect to a different
JobManager than the one
specified in the
configuration.
-p,--parallelism <parallelism> The parallelism with which
to run the program. Optional
flag to override the default
value specified in the
configuration.
-q,--sysoutLogging If present, suppress logging
output to standard out.
-s,--fromSavepoint <savepointPath> Path to a savepoint to reset
the job back to (for example
file:///flink/savepoint-1537
).
-z,--zookeeperNamespace <zookeeperNamespace> Namespace to create the
Zookeeper sub-paths for high
availability mode
Options for yarn-cluster mode:
-yD <arg> Dynamic properties
-yd,--yarndetached Start detached
-yid,--yarnapplicationId <arg> Attach to running YARN session
-yj,--yarnjar <arg> Path to Flink jar file
-yjm,--yarnjobManagerMemory <arg> Memory for JobManager Container [in
MB]
-yn,--yarncontainer <arg> Number of YARN container to allocate
(=Number of Task Managers)
-ynm,--yarnname <arg> Set a custom name for the application
on YARN
-yq,--yarnquery Display available YARN resources
(memory, cores)
-yqu,--yarnqueue <arg> Specify YARN queue.
-ys,--yarnslots <arg> Number of slots per TaskManager
-yst,--yarnstreaming Start Flink in streaming mode
-yt,--yarnship <arg> Ship files in the specified directory
(t for transfer)
-ytm,--yarntaskManagerMemory <arg> Memory per TaskManager Container [in
MB]
-yz,--yarnzookeeperNamespace <arg> Namespace to create the Zookeeper
sub-paths for high availability mode
-n 10 一共启动10个TaskManager节点
-jm 1024 JobManager的内存大小为1024M
-tm 2048 TaskManager的内存大小为2048M
-d 使用detached模式进行部署(部署完成后本地命令行可以退出)
-qu default 部署到YARN的default队列中