Apache Flink 的 Per-Job 提交流程

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


目录

Apache Flink 的 YARN Session 提交流程

Apache Flink 的 Per-Job 提交流程

Apache Flink 的 K8s Session 提交流程


正文

如图所示, Yarn Per-Job 模式提交作业与 Yarn-Session 模式提交作业只在步骤 1 ~ 3 有差异,步骤 4 ~ 10 是一样的。Per-Job 模式下, JobGraph 和集群的资源需求一起提交给 Yarn 。

Apache Flink 的 Per-Job 提交流程_第1张图片


1. 启动集群

  1. 使用 ./flink run -m yarn-cluster 提交 Per-Job 模式的作业
  2. Yarn 启动 Flink 集群。
  • 如果提交到已经存在的集群,则获取 Yarn 集群信息、应用 ID,并准备提交作业。
  • 如果是启动新的 Yarn 集群,则进入到步骤 3。
  1. Yarn 启动新 Flink 集群
  • 如果没有集群,则创建一个新的集群。首先将应用配置(flink-conf.yamllogback.xmllog4j.properties)和相关文件( Flink Jar、配置类文件、用户Jar文件、 JobGraph 对象等)上传至分布式存储(如HDFS)的应用暂存目录。
  • 通过 Yarn Client 向 Yarn 提交 Flink 创建集群的申请,Yarn 分配资源,在申请的 Yarn Container 中初始化并启动 Flink JobManager 进程,在 JobManager 进程中运行 YarnJobClusterEntryPoint 作为集群启动的入口(不同的集群部署模式有不同的 ClusterEntrypoint 实现), 初始化 Dispatcher、ResourceManager,启动相关的 RPC 服务,等待 Client 通过 Rest 接口提交作业。

和 Yarn Session 模式的区别就在于 Flink 集群的启动入口不同,Yarn Session 模式是YarnSessionClusterEntrypoint,Per-Job 模式是YarnJobClusterEntryPoint


2. 作业提交

Yarn 集群准备好后,开始作业提交。Dispatcher 从本地文件系统获取 JobGraph,当收到 JobGraph 后,为作业创建一个 JobMaster ,将工作交给 JobMaster (负责作业调度、管理作业和 Task 的生命周期),构建 ExecutionGraph ( JobGraph 的并行化版本,调度层最核心的数据结构)。

该步骤与 Session 模式下的不同,Client 并不会通过 Rest 向 Dispatcher 提交 JobGraph ,由 Dispatcher 从本地文件系统获取 JobGraph ,其后的步骤与 Session 模式一样。

这两个步骤结束后,作业进入调度执行阶段。


3. 作业调度

  1. JobMaster 向 YarnResourceManager 申请资源,开始调度 ExecutionGraph 执行,向 YarnResourceManager 申请资源;初次提交作业集群中尚没有 TaskManager ,此时资源不足,开始申请资源。
  2. YarnResourceManager 收到 JobMaster 的资源请求,如果当前有空闲 Slot 则将 Slot 分配给 JobMaster ,否则 YarnResourceManager 将向 Yarn Master 请求创建 TaskManager 。
  3. YarnResourceManager 将资源请求加入等待请求队列,并通过心跳向 YARN RM 申请新的 Container 资源来启动 TaskManager 进程; Yarn 分配新的 Container 给 TaskManager
  4. YarnResourceManager 启动,然后从 HDFS 加载 Jar 文件等所需的相关资源,在容器中启动 TaskManager 。
  5. TaskManager 启动之后,向 ResourceManager 注册,并把自己的 Slot 资源情况汇报给 ResourceManager 。
  6. ResourceManager 从等待队列中取出 Slot 请求,向 TaskManager 确认资源可用情况,并告知 TaskManager 将 Slot 分配给了哪个 JobMaster 。
  7. TaskManager 向 JobMaster 提供 Slot , JobMaster 调度 Task 到 TaskManager 的此 Slot 上执行。

至此作业进入执行阶段。

执行与 Yarn Session 模式下一致。

你可能感兴趣的:(大数据技术体系,flink)