一、简介
YARN(Yet Another Resource Negotiator)是Hadoop2.0 为集群引入的一个资源管理层。基本思想是将JobTracker的两个主要功能:资源管理和作业调试/监控分离,它将JobTracker守护进程的职责分离了出来。JobTracker的职责有:
- Hadoop 集群的资源仲裁
- MapReduce作业管理
YARN创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。
JobTracker的模式问题在于,它是Hadoop集群计算层的单一故障点,JobTracker的任何失效都意味丰正在执行的作业将功亏一篑,需要重新再跑一次。所有作业的通信、调试和资源管理都是由JobTracker的主守护进程控制,所以JobTracker的单点很容易造成扩展的瓶颈。
JobTracker的功能紧密地耦合在一起,只能支持MapReduce一种计算模式应用到集群上。MapReduce不适合多种应用混合在一起,而且用这种模式强制解决所有遇到的问题也是不明智的。
YARN负责集群的资源管理和应用调度,它不知道正在运行的应用的类型,也不知道应用的任何内部信息。资源协商严格按照协议进行。MapReduce仅是YARN中的一种应用模式,其它应用模式也像MapReduce一样可以使用既定的协议从YARN中申请CPU、内存或其它资源,并在集群中运行。
二、YARN的架构
基于YARN的集群主要有5种类型的模块:
- 资源管理器(Resource Manager,RM)
- 节点管理器(Node Manager,NM)
- Application Master(AM)
- 容器(Container)
- 客户端(Client)
1.资源管理器
资源管理器有以下两个主要的组件:
- 调度器(scheduler)
- 应用管理器(ApplicationsManager)
调度器负责为集群中执行的各种应用分配资源。当应用失败或者硬件故障的时候,调度器不保证能够重启应用。调度是基于RM所了解的集群的全局状态进行的,分配资源的过程中使用了配置的队列和容量参数信息。
调度的策略可以作为插件参与到调度器中。Hadoop1.X中 , 容量调度器(CapacityScheduler)和公平调度器(FairScheduler)同样存在于Hadoop2.X中。
应用管理器负责处理客户端提交的应用。另外,它根据应用的要求和AM协商所需要的容器,并启动应用程序。在应用失败的情况下,应用管理器还提供重启AM的服务。
RM的耦合度很低,它使用两个公共接口和一个私有接口与其他组件通信,接口包括:
- 为客户端提交作业的公共接口(Application-Client Protocol)
- 为AM请求资源的公共接口(Application-Master Protocol)
- 与NM交互使用的内部接口
资源是动态分配的,并且不感知应用的内部状态或者优化措施,这样便可以实现对集群资源的有效利用。AM使用如下参数发送资源申请的请求:
- 请求的容器的数量
- 每个容器的详细资源规格信息
- 容器在主机或机架上位置分布的偏好
- 提出的请求在当前应用中的优先级
RM的调度器获得请求后,为AM分配容器,然后将容器转交给AM。在集群资源不足的情况下,RM可能要求AM归还一些容器。如果等待超过一定时间后依然没有容器被释放,RM可以终止容器的运行。
2.Application Master
AM使用Application-Master协议与RM进行交互,并且AM直接从NM处获取容器的状态。AM也能通过与NM的交互来启动和停止分配给它的容器。AM与NM之间的交互是通过ContainerManager协议来完成的。
3.节点管理器
NM是每个节点的守护进程,负责本地容器的管理,管理范围从认证到资源监控。它们使用心跳信息向RM汇报状态。容器启动上下文(Container Launch Context,CLC)记录被用于指定容器的配置信息,例如依赖、数据文件路径、环境变量等。NM可以根据CLC中的配置信息启动容器。
同一个AM的容器间的资源可以共享,另外,只要提供外部资源的URL,也可以下载这些资源及其依赖。NM负责容器的终止操作,依据的是来自AM或RM的请求。如果一个容器超出了它的租约,NM还有权终止这个容器。终止容器的操作包括清理操作,例如删除容器生成的本地数据。
NM的职责还包括监控本地的物理资源,如CPU、内存和磁盘的健康状态,并且还将这些状态汇报给RM。RM的调试器会根据NM的负载情况和健康状态做出如何分配容器的决定。
NM向应用提供日志聚合的服务。标准输出和错误日志会在应用完成的时候输出到HDFS上。NM能通过配置添加插件辅助服务。例如:一项辅助服务可以让应用的本地数据直到应用结束后才被删除,而不是在容器终止的时候就删除,这对于某些应用场景是很有用的。
4.YARN客户端
YARN客户端负责为AM提交合适的CLC。正如之前所说,AM本身也是运行在容器中的,这个容器资源也需要由客户端与RM协商而得到。YARN客户端同时还负责AM的注册,并且可以自由提供其他服务给它的消费者。
三、开发YARN的应用程序
YARN能引入其它的计算模式到Hadoop中。Hadoop 2.X、MapReduce、Pig和Hive都有AM的库和对应的客户端。开发人员可以使用YARN API编写自己的应用并运行在现有的Hadoop框架内。同样,企业如果已经有大量的数据集在HDFS,也可以编写自定义的应用来使用它们,而不需要提供新的集群或迁移已有的数据。
Storm是一个已经移植到YARN上的实时流处理引擎,带来了将数据向计算机节点移动的应用模式。Spark是另一个可以运行在YARN上的项目,并能利用已有的Hadoop框架来提供基于内存的数据转换(包括MapReduce)。还有很多正在开发的项目都展示了Hadoop有能力成为一个通用集群计算平台。