> 文章列表 > Flink任务提交流程

Flink任务提交流程

Flink任务提交流程

抽象流程

抽象级别:不管是什么模式,大体上就是上面这个流程。

  1. 任务提交给分发器
  2. 分发器把任务提交给JobManager上的JobMaster组件
  3. JobMaster收到任务之后,就会想JobManager上的ResourceManager去请求Slot
  4. JobManager上的ResourceManager会提供给JobMaster相应的Slot
  5. JobMaster把任务调度到具体的TaskManager上去执行
  6. 等待执行结果

 

Standalone模式下的任务提交

  1. 客户端把任务提交给Dispacher(分发器)
  2. 分发器启动JobMaster,并把任务提交给JobMaster
  3. JobMaster收到任务之后,会想JobManager的ResourceManager组件去请求资源
  4. JObManager的ResourceManager收到请求后,直接向TaskManager去请求相应的资源
  5. TaskManager会向JobMaster提供相应的资源
  6. JobMaster把任务调度到TaskManager去执行

 

Yarn-session模式下的任务提交

Session模式提交分2步:

  • 启动yarn-session

  1. yarn-session.sh脚本向Yarn的ResourceManager请求Container(容器),这个容器就是ApplicationMaster
  2. Yarn的ResourceManager收到请求后,就会启动JobManager,这个AppMaster就包含了Flink的JobManager(主节点)
  3. JobManager这个角色,就会启动Dispacher和ResourceManager,这里没有TaskManager和JobMaster
  •  提交任务

  1. 客户端提交任务到Dispacher(分发器)
  2. 分发器就会启动JobMaster
  3. JobMaster会向JobManager的ResourceManager请求资源
  4. JobManager的ResourceManager没有资源,因此向Yarn的ResourceManager申请资源
  5. Yarn的ResourceManager收到请求后,就会启动Container(容器),这个容器就包含了TaskManager角色
  6. TaskManager启动后就会向JobManager的ResourceManager注册资源,同时也会向JobMaster提供资源
  7. JobMaster收到资源后,就会把任务调度给Container去执行,因为Container包含了TaskManager,因此任务会顺利执行完成
  8. 任务执行完之后,Container就会销毁(TaskManager就被销毁了),集群又恢复到第一步的状态

 

per-job模式下的任务提交

和per-job模式下的任务提交类似。

  1. 客户端提交任务到Yarn集群
  2. Yarn的ResourceManager收到任务请求后,会启动Container(容器),也就是AppMaster。这里包含了JobManager(Flink的主角色,这个JobManager没有Dispacher,但是有JobMaster和ResourceManager)
  3. JobManager里的JobMaster向JobManager里的ResourceManager请求资源
  4. JobManager的ResourceManager没有资源,因此会向Yarn去申请资源
  5. Yarn的ResourceManager收到请求后,会额外启动Container(容器),启动的容器就会带有TaskManager(Flink的从角色)
  6. Container会反向注册到AppMaster,告诉AppMaster自己的资源情况
  7. Container会把资源提供给AppMaster(JobManager的JobMaster)
  8. JobMaster会把任务具体地调度给Container去执行(TaskManager)
  9. 任务执行完之后,Container(TaskManager)会被AppMaster销毁,最终,AppMaster也会销毁。