Flink任务提交流程

一、任务提交流程

上篇有简单提到Flink的运行方式有YARN、Mesos、K8s,以及standalone,所以老规矩先根据上篇的内容,先上一个运行图揭示一下当一个应用提交执行时,Flink的各个组件是如何交互协作的
在这里插入图片描述
组件交互流程如上,那么接下来会详细的跟大家聊聊Yarn上运行细节

二、任务提交流程(YARN)

先上图:
在这里插入图片描述
在Flink任务提交后:

  1. Client向HDFS上传Flink的Jar包和配置
  2. 向Yarn ResourceManager提交任务
  3. ResourceManager分配Container资源并通知对应的NodeManager启动ApplicationMaster
  4. ApplicationMaster启动后加载Flink的Jar包和配置构建环境
  5. 启动JobManager,之后ApplicationMaster向ResourceManager申请资源启动TaskManager
  6. ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager,NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager
  7. TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。

三、任务调度原理

在这里插入图片描述
客户端不是运行时和程序执行的一部分,但它用于准备并发送dataflow(JobGraph)给Master(JobManager),然后,客户端断开连接或者维持连接以等待接收计算结果。
当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManagerJobManager 再调度任务到各个 TaskManager 去执行然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程
Client 为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming的任务),也可以不结束并等待结果返回。
JobManager 主要负责调度 Job 并协调 Task 做 checkpoint,职责上很像 Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。
TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自己的上游建立 Netty 连接,接收数据并处理。

=========================================================
枯燥无味的文章结束了,这里跟大家简单介绍了Flink的任务提交流程,下一篇会跟大家详细介绍调度流程中的一些小细节!!!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐