flink 任务提交流程源码解析

flinkjob 提交流程

任务启动流程图

flink 任务提交流程源码解析
flink 任务提交流程源码解析
可以先简单看下流程图,对比下面详细说明,再回来看会更加清晰

1客户端的工作内容

1.1解析命令

  • 第一步是命令行的解析,根据用户提交的 flink run 命令,在客户端类cliFronted中进行解析
  • 通过空格与-c -m 等参数指令,提取出,用户提交的参数详情
  • 获取flink的conf目录的路径
  • 根据conf目录的路径,加载配置
  • 加载命令行的输入 command line 封装命令行接口:按顺序 generic yarn default
  • 获取run动作 默认的配置项
  • 根据用户指定的配置项 进行解析

这个帖子是根据flink1.12来做的基础,所以对比以后的版本可能会有一点出入,但总的流程都是一致的,例如,flink1.12中 任务的启动模式 会根据提交命令中指定的是否是yarn,standalone等来封装一个 command line 提交给后面使用,如果用户没有指定,flink就会根据默认顺序generic yarn default 来封装这个flink任务的启动模式

1.2 执行用户代码

用户代码会从env.execute开始执行

  • 从StreamExecutionEnvironment开始 execute
  • 根据用户代码 ,调用的算子,生成streamgraph图
  • streamgraph 转化 jobgraph
  • yarnjobClusterExcutor 创建启动 yarnclient 包含了一些yarn flink的配置和环境信息,并构造了一个yarnClusterDescriptor
  • yarnClusterDescriptor 获取集群特有配置 : jobmanager 内存 每个taskmanager 内存 每个 slot槽数
  • 部署前检查: jar包路径 conf路径 yarn最大核数 检查置顶的yarn队列是否存在, 检查yarn有足够的资源
  • yarn启动appmaster AM 通过startAppMaster

2集群工作内容

2.1 启动AM

  • 初始化文件系统
  • 封装appcontext 一些环境信息 appid
  • yarn应用的文件上传器初始化: fs hdfs路径
  • 配置appid zk的namespace,高可用重试次数 id

2.2启动JobManager和 ResourceManager

  • am启动dispatch和ResourceManager
  • ResourceManager 中的 slotmanager 组件负责真正像yarn申请资源
  • dispatch 启动 jobManager
  • jobManage中的slotpool 负责真正发送请求

2.3 申请资源 启动 taskmanager

  • JobManager 将JobGraph 转换 ExcuetionGraph
  • jobManager 中的slotpool 想 ResourceManager发出申请资源的请求
  • jobManager 收到 ResourceManager中来自 yarn 的许可的请求回复后,会启动TaskManager

3分配任务

3.1 资源计算

其实这是2.3中的工作,在申请资源时,flink在生成StreamGraph时,会根据用户代码,来计算任务的并行度,并计算出所需多少个slot,根据系统配置的slot大小,来计算所需任务的内容大小

3.2 分发任务

  • tm启动后,tm中 TaskExecutor 会像 resourceManager 注册slot
  • TaskExecutor 收到 resourceManager回复的肯定分配指令后,会把resourceManager给过来的offset,给到JobMaster
  • JobMaster 会提交具体的task到TaskExecutor
  • 任务就启动了

总结

  1. flink cliFronted类, 解析参数,封装commandLine, 执行用户代码生成streamGraph 并将streamGraph转化成JobGraph

  2. yarnjobClusterExcutor 初始化一个yarnclient对象,构造yarnClusterDescriptor

  3. yarnClusterDescriptor 将 依赖,jar,及其集群配置上传到Yarn Resource manager上

  4. yarn检查集群配置

  5. 启动 AM

  6. AM 启动 dispatch 和 ResourceManager(里面有slotmanager 真正管理资源向yarn申请资源的)

  7. dispatch 启动 JobMaster (里面有slotpool 真正发送请求的)

  8. JobMaster 将 JobGraph 转换 ExcuetionGraph

  9. JobMaster 向 Resourcemanager申请资源

  10. Resourcemanager 向 yarn申请资源 启动 tm

  11. tm启动后 TaskExecutor 向 resourceManager 注册slot

  12. TaskExecutor 接收到分配的指令,提供offset给JobMaster

  13. JobMaster 提交具体的task 到 TaskExecutor

  14. JobManager 的 职 责 主 要 是 接 收 Flink 作 业 , 调 度 Task , 收 集 作 业 状 态 和 管 理TaskManager。

  15. TaskManager 相当于整个集群的 Slave 节点,负责具体的任务执行和对应任务在每个节点上的资源申请和管理。

具体Graph中如何转换的 可以参考 https://blog.csdn.net/Direction_Wind/article/details/121773408

上一篇:Flink-join的三种方式


下一篇:Flink Sql With 1.14 Queries 查询-概览(译)