1.client 向 ResourceManager 提交应用程序,其中包括启动该应用的 ApplicationMaster 的必须信息,例如 ApplicationMaster 程序、启动 ApplicationMaster 的命令、用户程序等。
2.ResourceManager 启动一个 container 用于运行 ApplicationMaster。
3.启动中的 ApplicationMaster 向 ResourceManager 注册自己,启动成功后与ResourceManager 保持心跳。
4.ApplicationMaster 向 ResourceManager 发送请求,申请相应数目的 container。
5.ResourceManager 返回 ApplicationMaster 的申请的 containers 信息。申请成功的container,由 ApplicationMaster 进行初始化。container 的启动信息初始化后,ApplicationMaster 与对应的 NodeManager 通信,要求 NodeManager 启动 container。ApplicationMaster 与 NodeManager 保持心跳,从而对 NodeManager 上运行的任务进行监控和管理。
6.container 运行期间,ApplicationMaster 对 container 进行监控。container 通过 RPC协议向对应的 ApplicationMaster 汇报自己的进度和状态等信息。
7.应用运行期间,client 直接与 ApplicationMaster 通信获取应用的状态、进度更新等信息。
8.应用运行结束后,ApplicationMaster 向 ResourceManager 注销自己,并允许属于它的container 被收回。