YARN集群中应用程序的执行流程如图3-5所示,图中流程说明如下:
图3-5 YARN应用程序执行流程
(1)客户端提交应用程序(可以是MapReduce程序、Spark程序等)到ResourceManager。
(2)ResourceManager分配用于运行ApplicationMaster的Container,然后与NodeManager通信,要求它在该Container中启动ApplicationMaster。ApplicationMaster启动后,它将负责此应用程序的整个生命周期。
(3)ApplicationMaster向ResourceManager注册(注册后可以通过ResourceManager查看应用程序的运行状态)并请求运行应用程序各个Task所需的Container(资源请求是对一些Container的请求)。如果符合条件,ResourceManager会分配给ApplicationMaster所需的Container(表达为Container ID和主机名)。
(4)ApplicationMaster请求NodeManager使用这些Container来运行应用程序的相应Task(即将Task发布到指定的Container中运行)。
此外,各个运行中的Task会通过RPC协议向ApplicationMaster汇报自己的状态和进度,这样即使某个Task运行失败,ApplicationMaster也可以对其重新启动。当应用程序运行完成时,ApplicationMaster会向ResourceManager申请注销自己。