Yarn源码分析-任务提交流程(2)
简单版本和进阶版本 Yarn 提交流程
A. 简单版
- 客户端将 Application 启动需要文件或包上传到 HDFS (NodeManager 启动 Container 时会自动将这些包下载到本地)
- 客户端与 ResourceManager 通信,提交 Application 到 ResourceManager
- ResourceManager 找到 NodeManager,启动 ApplicationMaster
- ApplicationMaster 启动后,首先向 ResourceManager 注册
- ApplicationMaster 向 ResourceManager 报告心跳,心跳响应中包含了已经完成的 Container 信息和可分配的 Container 信息
- ApplicationMaster 根据自己的需要,与 NodeManager 通信,启动 Container
- ApplicationMaster 等待所有的 Container 完成,向 ResourceManager 申请注销
- ApplicationMaster 关闭与 NodeManager 通信
- ApplicationMaster 关闭与 ResourceManager 通信
B. 进阶版本
- 客户端将 Application 启动需要的文件或包上传到 HDFS(NodeManager 启动 Container 时会自动将这些包下载到本地)
- 客户端通过 ApplicationClientProtocol 协议与 ResourceManager 的 ClientRMService 通信,创建新的 Application,响应中包含了 ApplicationId 等信息
- 客户端填充 Application 提交上下文,通过 ApplicationClientProtocol 协议与 ResourceManager 的 ClientRMService 通信,提交 Application
- ResourceManager 接收到了客户端提交的 Application,从 Scheduler 中获取一个 Container,并通过 ResourceTracker 协议与 对应的 NodeManager 通信,启动 ApplicationMaster
- NodeManager 接收到了来自 ResourceManager 启动 Container 的请求( ApplicationMaster 也是一个 Container ),根据 Container 启动上下文下载 ApplicationMaster 启动需要的文件到本地,设置 Container 启动的环境变量,并执行 Container 启动命令,启动 ApplicationMaster
- ApplicationMaster 启动后,通过 ApplicationMasterProtocol 协议与 ResourceManager 的 ApplicationMasterService 注册自己,ApplicationMasterService 在 ApplicationMaster 注册的时候返回可分配的 Container 信息给 ApplicationMaster(可分配的 Container 信息还可以通过 ApplicationMaster 与 ApplicationMasterService 的心跳信息中返回)
- ApplicationMaster 拿到 ApplicationMasterService 返回的 Container 信息,填充 Container 启动上下文信息,通过 ContainerManagerProtocol 协议与 NodeManager 通信,启动 Container
- NodeManager 接收到了来自 ApplicationMaster 启动 Container 的请求,根据 Container 启动上下文下载 Container 启动需要的文件到本地,设置 Container 启动的环境变量,并执行 Container 启动命令,启动 Container
- ApplicationMaster 等待所有的 Container 完成,通过 ApplicationMasterProtocol 协议与 ResourceManager 的 ApplicationMasterService 注销自己,并汇报任务最终的运行状态