Flink作业提交流程

flink作业提交流程.png

  1. 基于上述结构,当用户向Flink提交作业时,提交脚本会启动一个Client进程对用户提交的jar进行编译和解析生成JobGraph。其中会有一些优化的过程,比如会将一些Operator Chain到同一个Task中。最后将JobGraph提交到Dispatcher。
  2. 将JobGraph提交到DisPatcher,即提交到集群中存在两种不同的情况需要分开解释。如果是pro-job的模式(Yran,MESOS),AM不会预先启动,Client会向资源管理系统(Yarn,Mesos)申请资源来启动AM,然后再向AM中的Dispatcher提交JobGraph。如果是Session模式(Standlone),AM会预先启动,Cluster直接与Dispatcher建立连接即可。
  3. JobGraph已经提交到了Dispatcher后,Dispatcher会首先启动一个JobManager组件,然后JobManger会向ResourceManager申请资源来执行作业中具体的任务。在这中间,又对pro-job模式和session模式有所区分。pro-job模式下,ResourceManager需要等待外部资源管理系统(Yarn,Mesos)分配资源,然后在Taskmanager启动TaskExecutor,等待TaskExecutor注册相应资源后再分配。Session模式下,TaskExecutor已经启动好了,只要获取空闲的资源,提交Task即可。
  4. ResourceManager注册了TaskExecutor,JobManager将JobGraph解析得到ExectionGraph,最后解析为物理执行计划。JobManager根据具体的Task向ResourceManger申请Slot,获取到slot后,将task发送到TaskExecutor上的slot上执行。

Slot管理

slot管理.png

  • SlotManager:管理着集群中所有slot的信息。TaskManager启动后,会向ResourceManager注册,slotManager会保存其slot的个数和资源信息。SlotManager在分配资源时,会挑选合适的slot,并向指定TaskManger发送Request信息,改TaskManager接着会将该slot提供给相应请求slot的JobManager。
  • SlotPool:保存Jobmanger中使用的slot信息。