Yarn源码分析-任务提交流程(2)

简单版本和进阶版本 Yarn 提交流程

A. 简单版

  1. 客户端将 Application 启动需要文件或包上传到 HDFS (NodeManager 启动 Container 时会自动将这些包下载到本地)
  2. 客户端与 ResourceManager 通信,提交 Application 到 ResourceManager
  3. ResourceManager 找到 NodeManager,启动 ApplicationMaster
  4. ApplicationMaster 启动后,首先向 ResourceManager 注册
  5. ApplicationMaster 向 ResourceManager 报告心跳,心跳响应中包含了已经完成的 Container 信息和可分配的 Container 信息
  6. ApplicationMaster 根据自己的需要,与 NodeManager 通信,启动 Container
  7. ApplicationMaster 等待所有的 Container 完成,向 ResourceManager 申请注销
  8. ApplicationMaster 关闭与 NodeManager 通信
  9. ApplicationMaster 关闭与 ResourceManager 通信

B. 进阶版本

  1. 客户端将 Application 启动需要的文件或包上传到 HDFS(NodeManager 启动 Container 时会自动将这些包下载到本地)
  2. 客户端通过 ApplicationClientProtocol 协议与 ResourceManager 的 ClientRMService 通信,创建新的 Application,响应中包含了 ApplicationId 等信息
  3. 客户端填充 Application 提交上下文,通过 ApplicationClientProtocol 协议与 ResourceManager 的 ClientRMService 通信,提交 Application
  4. ResourceManager 接收到了客户端提交的 Application,从 Scheduler 中获取一个 Container,并通过 ResourceTracker 协议与 对应的 NodeManager 通信,启动 ApplicationMaster
  5. NodeManager 接收到了来自 ResourceManager 启动 Container 的请求( ApplicationMaster 也是一个 Container ),根据 Container 启动上下文下载 ApplicationMaster 启动需要的文件到本地,设置 Container 启动的环境变量,并执行 Container 启动命令,启动 ApplicationMaster
  6. ApplicationMaster 启动后,通过 ApplicationMasterProtocol 协议与 ResourceManager 的 ApplicationMasterService 注册自己,ApplicationMasterService 在 ApplicationMaster 注册的时候返回可分配的 Container 信息给 ApplicationMaster(可分配的 Container 信息还可以通过 ApplicationMaster 与 ApplicationMasterService 的心跳信息中返回)
  7. ApplicationMaster 拿到 ApplicationMasterService 返回的 Container 信息,填充 Container 启动上下文信息,通过 ContainerManagerProtocol 协议与 NodeManager 通信,启动 Container
  8. NodeManager 接收到了来自 ApplicationMaster 启动 Container 的请求,根据 Container 启动上下文下载 Container 启动需要的文件到本地,设置 Container 启动的环境变量,并执行 Container 启动命令,启动 Container
  9. ApplicationMaster 等待所有的 Container 完成,通过 ApplicationMasterProtocol 协议与 ResourceManager 的 ApplicationMasterService 注销自己,并汇报任务最终的运行状态
© 2022 - 2023 Jayden. All rights reserved. Powered by Jayden.