一、概述:
Apache Hadoop YARN(Yet Another Resource Negotiator)是Hadoop的子项目,为分离Hadoop2.0资源管理和计算组件而引入,是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而Mapreduce等运算程序则相当于运行于操作系统之上的应用程序。
关于Yarn,有几点需要明白的是:
- 1)实际上,Yarn并不清楚用户所提交程序的运行机制是什么;
- 2)Yarn只负责提供运算资源的调度(用户程序向Yarn申请资源,Yarn就负责分配资源);
- 3)Yarn中的主管角色是ResourceManager,而具体提供运算资源的角色是NodeManager;
- 4)Yarn框架与运行的用户程序完全解耦,这就意味着在Yarn上面可以运行各种类型的分布式运算程序(Mapreduce只是其中的一种),比如mapreduce、storm程序,spark程序……;
- 5)Spark、Storm等运算框架都可以整合在Yarn上运行,只要他们各自的框架中有符合Yarn规范的资源请求机制即可;
- 6)Yarn就是一个通用的资源调度平台,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享。
二、架构组件
类似HDFS,YARN也是经典的主从(master/slave)架构
YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成,各组件的作用如下图所示:
1、ResourceManager
ResourceManager是YARN中主的角色
RM是一个全局的资源管理器,集群只有一个active的对外提供服务
- 负责整个系统的资源管理和分配
- 包括处理客户端请求
- 启动/监控 ApplicationMaster
- 监控 NodeManager、资源的分配与调度
它主要由两个组件构成: - 调度器(Scheduler)
- 应用程序管理器(Applications Manager,ASM)
调度器Scheduler:
- 调度器根据队列、容量等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。
- 需要注意的是,该调度器是一个“纯调度器”
- 它不从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完成。
- 调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(Resource Container,简称Container)表示,Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。
应用程序管理器Applications Manager,ASM:
- 应用程序管理器主要负责管理整个系统中所有应用程序
- 接收job的提交请求
- 为应用分配第一个 Container 来运行 ApplicationMaster
- 包括应用程序提交
- 与调度器scheduler协商资源以启动 ApplicationMaster
- 监控 ApplicationMaster 运行状态并在失败时重新启动它等
2、NodeManager
NodeManager 是YARN中的 slave角色
NodeManager :
- 当一个节点启动时,它会向