-
客户端Application(job)请求,客户端通知ResourceManager他要提交一个应用程序。
-
ResourecManager应答并带回ApplicationID。
-
Application Submission Context(应用程序提交上下文)包含ApplicationID、用户名、队列名、Container Launched Context(CLC)的资源请求、作业文件、安全令牌。CLC提供了资源需求(内存、CPU)、作业文件、安全令牌以及在节点上启动ApplicationMaster(AM)需要的其他信息。
-
ResourceManager收到Client(客户端)的Application Submission Context,就为ApplicationMaster调度一个可用的Contaner,这个Container就是ApplicationMaster,通常被称为Container0。此时若没有使用的Container,这个请求就会等待,直到找到了合适的Container,ResourceManager就会联系相应的NodeManager并启动ApplicationMaster。这个过程中将建立ApplicationMaster的RPC端口和用于跟踪的URL,用来监控应用程序状态。ResourceManager分配了Container后,ApplicationMaster的启动器直接与ApplicationMaster Container(Container0)相应的NodeManager通信,以设置并启动该Container,于是ApplicationMaster的生命周期开始。
-
ResourceManager发送关于集群的最大和最小容量信息。这时ApplicationMaster决定如何使用当前集群可用资源。
-
基于ResourceManager的可用资源报告,ApplicationMaster请求一定量的Container。该请求可非常具体。
-
ResourceManager基于调度策略,尽可能最优的为ApplicationMaster分配Container资源,然后将资源请求的应答发给ApplicationMaster。
-
ApplicationMaster将ResourceManager分配的Container告知NodeManager以便ApplicationMaster使用。
-
计算任务过程在Container中进行,这些Container与ApplicationMaster(不是ResourceManager)保持通信,并告知任务过程。 在这一点上,ResourceManager已经将分配的NodeManager的控制权移交给了ApplicationMaster。ApplicationMaster将独立联系其指定的NodeManager并提供Container Launch Context(CLC),CLC包括环境变量、远程存储依赖文件、安全令牌以及启动实际进程所需的命令。当Container启动时,所有数据文件、可执行文件以及必要的依赖文件都被拷贝到节点的本地存储上了。其中依赖文件可以被应用程序(job)的Container之间共享。 ResourceManager不参与应用程序的执行,只处理调度和监控其他资源。ResourceManager可以命令NodeManager杀死Container。(1)在ApplicationMaster通知ResourceManager自己已完成 或(2)ResourceManager需要为另一个应用程序抢占资源 或(3)Container超出资源限制 或(4)NodeManager接受ResourceManager指令杀死Containter 这样都可能发生杀死Container事件。 当Container被杀死后,NodeManager会清理本地工作目录。 作业结束后,ApplicationMaster通知ResourceManager该作业完成,然后ResourceManager通知NodeManager聚集日志并清理Container专用文件。如果Container还没有退出,NodeManager也可以接受指令去杀死剩余的Container(包括ApplicationMaster)。
-
ApplicationMaster将心跳和进度信息通过心跳发送给ResourceManager。在这些心跳中,ApplicationMaster可以请求和释放Constainer。当作也结束时,ApplicationMaster向Resourcemanager发出一个Finish消息,然后退出。
ApplicationMaster启动成功后将负责以下任务:
- 初始化向ResourceManager报告自己活跃信息的进程
- 计算应用程序的资源需求
- 将需求转换成YARN调度器可以理解的ReqsourceRequest
- 与调度器协商申请资源
- 与NodeManager合作使用分配的Container
- 跟踪正在运行的Container的状态,监控他们的进程
- 对Container或节点失败的情况进行处理,在必要的情况下重新申请资源
参考Hadoop YARN权威指南、Hadoop大数据挖掘