YARN最初设计是为了解决Hadoop中MapReduce计算框架中的资源管理问题,但现在它已经是一个更加通用的资源管理系统,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。
如果你的应用程序也需要借助YARN的资源管理功能,你也可以实现YARN提供的API,将应用程序运行于YARN之上,资源分配与回收统一交给YARN去管理,可以大大简化资源管理功能的开发。
当前,也有很多应用程序已经可以构建于YARN之上,如Storm、Spark等计算框架。
YARN Client提交Application到ResourceManager,它会首先创建一个Application上下文件对象,并设置ApplicationMaster必需的资源请求信息,然后提交到ResourceManager。YARN Client也可以与RM通信,获取到一个已经提交并运行的Application的状态信息等,具体详见后面ApplicationClientProtocol协议的分析说明
ResourceManager是YARN集群的Master,负责管理整个集群的资源和资源分配。
ResourceManager作为集群资源的管理和调度的角色,如果存在单点故障,则整个集群的资源都无法使用。
NodeManager是集群中实际拥有实际资源的工作节点,主要负责启动应用所需的容器,监控资源的使用情况并将之汇报给调度器。Client提交Job以后,会将组成Job的多个Task调度到对应的NodeManager上进行执行。
ApplicationsManager:负责接收作业,协商获取第一个容器用于执行ApplicationMaster和提供重启失败ApplicationMaster container的服务。
ApplicationMaster:负责同调度器协商以获取合适的容器,并跟踪这些容器的状态和监控其进度。
Container:容器中封装了机器资源,如内存,CPU, 磁盘,网络等,每个任务会被分配一个容器,该任务只能在该容器中执行,并使用该容器封装的资源。
参考资料:
[0] MapReduce NextGen aka YARN aka MRv2
[1] Hadoop YARN架构设计要点