YARN由四大部分组成:ResourceManager、NodeManager、Container和ApplicationMaster,其中ResourceManager可看作是上一代Hadoop中的master,将NodeManager看作是slave,ResourceManger中包含两大组件:ApplicationManager和ResourceScheduler,其中ResourceManager作为一个纯资源调度器,只负责分配和调度资源,根据请求将资源打包成Container(一个逻辑资源单位,它可封装CPU、磁盘、网络等等不同种类的资源)进行发送,资源的调度是在运行过程中动态分配的,而ApplicationManager则负责应用程序的提交以及ApplicationMaster的启动及监控。
YARN工作步骤如下:
1.client提交用户程序、ApplicationMaster、ApplicationMaster启动命令给RM;
2.由RM中的ApplicationManager向ResourceScheduler请求分配资源(Container),并且让对应的NodeManager在分配到的Container中启动应用程序的ApplicationMaster;
3.ApplicationMaster向RM(实际即ApplicationManager)注册以便ApplicationManager对ApplicationMaster进行监控管理,并且为每个每个任务向ResourceScheduler请求资源;
4.获取资源后,ApplicationMaster与对应的NodeManager通信,令其启动任务;
5.NodeManager为任务设置好运行环境(环境变量、JAR包、二进制代码等等),将任务启动命令写到一个脚本中,并通过运行该脚本启动任务;
6.运行过程中,各个任务通过RPC协议向ApplicationMaster汇报自己的运行情况和资源使用情况;
7.应用程序完成后,ApplicationMaster向ApplicationManager注销并关闭自己。