小白学习Flink系列--第五篇(任务提交流程简述)

回顾

在开始讲本篇内容之前,先回忆一下上篇文章讲了什么,主要讲了以下几点

  • Runtime架构组件介绍
  • Task operator chain、slot的介绍,理清了TaskManager、task slot 、task operator chain之间的关系

那么自然而然的事情,讲完了基本组成,就要抛出一个主要的问题了,用村上春树的书名来表达的话就是----当你提交任务后,Flink做了什么?

部署方式

引子

​ 重要的事情说三遍。Flink架构主要做的是什么呢?

​ 资源和任务的匹配,即算子本地化!

​ 资源和任务的匹配,即算子本地化!

​ 资源和任务的匹配,即算子本地化!

​ Flink Runtime可以作为yarn的应用程序运行,也可以在Mesos集群上运行,也可以在单机上运行(本地调试相当方便)

​ 本文主要以standalone和yarn两种方式进行探讨
小白学习Flink系列--第五篇(任务提交流程简述)

Yarn

  • 八股文流程
    1. FlinK任务提交前,client向HDFS上传Flink的jar包和配置
    2. 提交任务给RM,RM接受到请求后,分配AM的container资源并启动AM
    3. AM启动后加载jar包后启动JobManager,之后AM向RM申请资源
    4. RM分配资源container
    5. AM通知节点所在的nodemanager启动TaskManager
    6. NodeManager加载配置环境后启动TM
    7. TM启动后向JobManager发送心跳,等待JM向其分配任务


小白学习Flink系列--第五篇(任务提交流程简述)

Standalone

​ 流程:

  1. 用户提交任务,Client负责作业的编译和提交
  2. client产生jobGraph提交到集群中执行
  3. AM预先启动,client直接与Dispatcher建立连接提交作业
  4. Dispatcher启动JobManager,由其向RM申请资源执行任务
  5. RM向外部资源申请资源启动Task Executor,等待task executor启动后向RM注册
  6. RM选择合适的slot通知TM 进行分配(类似银行大厅叫号,请xx号到几号柜台)
  7. TM拿个小本本记下来,去找柜员(JobManager)注册
  8. JobManager收到注册上来的slot后,提交Task
  9. TaskExecutor收到JM提交的Task后,埋头干活(启线程,也就是task执行任务)
    小白学习Flink系列--第五篇(任务提交流程简述)