原文见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汇报自己的结束状态。