原文见 http://xiguada.org/yarn-application_run/
本节简单描述了一个Application在YARN上的执行流程,希望对初识YARN的同学提供一些帮助。
图1 Application执行流程
-
客户端提交作业到RM。
-
RM在调度器中创建一个新的AppAttempt,维护该作业的信息。
-
NM1向RM发送心跳,RM把ApplicationMaster分配到该NM1。
-
RM通过RPC调用NM1的startcontainer方法。
-
NM1启动AM。
-
AM启动后向RM注册,并向RM请求资源。
-
RM在调度器中维护AM所需的资源container1、container2等。
-
NM2向RM发送心跳,请求资源。
-
RM向NM2分配相应的资源container1。
-
AM向RM发送心跳,RM告诉AM已经分配的container。
-
AM通过RPC调用NM2的startcontainer方法。
-
NM2启动container1。
-
Container1启动后向AM汇报进度。
-
Container1结束后NM通过心跳通知RM。
-
AM向RM发送心跳,RM告诉AM相应的container1已经结束(也可以实现container直接告诉AM已经成功结束)。
-
当AM的所有Task已经结束,AM向RM汇报自己的结束状态。