- YARN是什么?
从Hadoop 2 开始,MapReduce背一个改进的版本所替代,这个版本叫做MapReduce 2.0(MRv2)或YARN(Yet Another Resource Negotiator,另一种资源协调者)。
YARN是一种新的Hadoop资源管理器,也是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
- MapReduce的问题
JobTracker是MapReduce的集中处理点,存在单点故障。
JobTracker承担了太多的任务,造成了过多的资源消耗,当job非常多的时候,会造成很大的内存开销,也增加了JobTacker崩溃的风险。业界的共识是老版本的MapReduce的上线只能支持4000个节点主机。
在TaskTracker端,只以map/reduce task的数目作为资源的表示过于简单,没有考虑到CPU和内存的占用情况,如果两个大内存小号的task被调度到了一块,很容易出现Java的OOM。
在TaskTracker端,把资源强制划分为map task slot和reduce task slot。当系统中只有map task或者只有reduce task的时候,这会造成资源的浪费,也就是前面提到的集群资源利用的问题。
YARN的原理
YARN最初是为了修复MapReduce实现里的明显不足,并对可伸缩性、可靠性和集群利用率进行了提升。YARN把JobTracker的两个主要功能(资源管理和作业调度/监控)分成了两个独立的服务程序——全局的资源管理(Resource Manager,简称为RM)和针对每个应用的App Master(AM)。RM和每一台机器的阶段管理服务器(Node Manager)能够管理用户在哪台机器上的进程,并能对计算进行组织。
RM支持分层级的应用队列,这些队列享有集群一定比例的资源。它是一个调度器,可以给予应用程度对资源的需求进行调度。每一个应用程序需要不同类型的资源,因此就需要不同的容器(container)。资源包括:内存、CPU、磁盘、网络等等。
NodeManager是每一台机器的代理,实质性应用程序的容器,它监控应用程序的资源使用情况并向资源管理器汇报。
- YARN和MapReduce对比
客户端应用不变,其API大部分保持兼容,这也是为了对开发者透明化,使其不必对原有应用代码做大的修改,但是原框架中核心的JobTracker和TaskTracker不见了,取而代之的是RM、AM与NodeManager三个部分。
RM是一个中心的服务,它是调度和启动每一个Job所属的AM,另外监控AM的存在情况。在老版本的Job里面所在的task监控和重启在YARN中都不见了,这就是YARN中出现AM的原因。RM负责作业与资源的调度,接受JobSubmitter提交的作业,按照作业的上下文(Context)信息,以及从NodeManager收集来的状态信息,启动调度过程,分配一个Container。
NodeManager功能比较单一,就是负责Container状态的维护,并向RM保持心跳。
AM负责一个Job生命周期内的所有工作,类似老框架中的JobTracker。
- YARN的优点
大大减少了JobTracker的资源消耗,并且让检测每一个Job子任务(tasks)状态的程序分布式了。对于资源的表示以内存为单位,比之前以剩余slot数目为单位更合理。监控Job下的tasks的运行状况,现在由AM完成,而RM中有一个模块叫做ApplicationsMasters,它用来监测AM的运行状况,如果出问题,会将其在其他机器上重启。Container是YARN为了将来做资源隔离而提出的一个框架。
总之,YARN从某种意义上来说,应该算是一个云操作系统,它负责集群的资源管理。在操作系统之上可以开发各类的应用程序。这些应用可以同时利用Hadoop集群的计算能力和丰富的数据存储模型,共享同一个Hadoop集群和驻留在集群上的数据。