ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

flink 任务提交流程源码解析

2022-02-22 19:01:59  阅读:183  来源: 互联网

标签:启动 flink 用户 yarn 任务 源码 解析 资源


flinkjob 提交流程

任务启动流程图

请添加图片描述
请添加图片描述
可以先简单看下流程图,对比下面详细说明,再回来看会更加清晰

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,用户,yarn,任务,源码,解析,资源
来源: https://blog.csdn.net/Direction_Wind/article/details/123074486

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有