YARN与MapReduce1 相比。

        有时用“MapReduce 1”来指代Hadoop初始版本(版本1 及更早期版本)中的MapReduce分布式执行框架,以区别于使用了YARN(Hadoop 2 及以后的版本)的MapReduce2。

注意:新旧版本MapReduce API之间的区别不同于MapReduce 1 执行框架和MapReduce 2 执行框架的区别。API具有面向用户的、客户端的特性,并且决定着用户怎样写MapReduce程序;而执行机制只是运行MapReduce程序的不同途径而已。新旧版本API在MapReduce 1和2运行的四种组合都是支持的。

        MapReduce 1中,有两类守护进程控制着作业执行过程:一个jobtracker及一个或多个tasktracker。jobtracker通过调度tasktracker上运行的任务来协调所有运行在系统的作业。tasktracker在运行任务的同时将运行进度报告发送给jobtracker,jobtracker由此记录每项作业任务的整体进度情况。如果其中一个任务失败,jobtracker可以在另一个tasktracker节点上重新调度该任务。

        MapReduce 1 中,jobtracker同时负责作业调度(将任务与tasktracker匹配)和任务进度监控(跟踪任务、重启失败或迟缓的任务;记录任务流水,如维护计数器的计数)。相比之下,YARN中,这些职责是由不同的实体担负的:他们分别是资源管理器和application master(每个MapReduce作业一个)。jobtracker也负责存储已完成作业的作业历史,但是也可以运行一个作业历史服务器作为一个独立的守护进程来取代jobtracker。在YARN中,与之等价的角色是时间轴服务器(timeline server),它主要用于存储应用历史。

        YARN中与tasktracker等价的角色是节点管理器。下表中对两者之间的映射关系进行了总结。

MapReduce 1 YARN
Jobtracker 资源管理器、application master、时间轴服务器
Tasktracker 节点管理器
Slot 容器

        YARN的很多设计是为了解决MapReduce 1 的局限性。使用YARN的好处包括以下几方面。

可扩展性(Scalability)

        与MapReduce 1 相比,YARN可以在更大规模的集群上运行。当节点达到4000,任务数达到40,000时,MapReduce 1 会遇到可扩展性瓶颈,瓶颈源自于jobtracker必须同时管理作业和任务这样一个事实。YARN利用其资源管理器和application master 分离的架构优点克服了这个局限性,可以扩展到面向将近10,000个节点和100,000个任务。

        与jobtracker相比,一个应用的每个实例(这里指一个MapReduce作业)都对应一个专门的application master,该管理进程(master)在应用的持续期间运行。这个模型实际上与初始的Google MapReduce论文中所描述的更接近。论文中描述了如何启动一个管理(master)进程以协调运行在一系列工作(worker)上的map和reduce任务。

可用性(Availability)

        当服务守护进程失败时,通过为另一个守护进程复制接管工作所需的状态以便其继续提供服务,从而可以获得高可用性(HA,High availability)。然而,jobtracker内存中大量快速变化的复杂状态(例如,每个任务状态每几秒会更新一次)使得改进jobtracker服务获得高可用性非常困难。

        由于YARN中jobtracker在资源管理器和application master之间进行了职责划分。高可用的服务随之成为一个分而治之问题:先为资源管理器提供高可用性,再为YARN应用(针对每个应用)提供高可用性,实际上,对于资源管理器和application master,Hadoop 2 都支持 MapReduce作业的高可用性。

利用率(Utilization)

        MapReduce 1 中,每个tasktracker都配置有若干固定长度的slot,这些slot是静态分配的,在配置的时候就被划分为map slot和reduce slot。一个map slot仅能用于运行一个map任务,同样,一个reduce slot仅能用于运行一个reduce任务。

        YARN中,一个节点管理器管理一个资源池,而不是指定的固定数目的slot。YARN上运行的MapReduce不会出现由于集群中仅有map slot可用导致reduce任务必须等待的情况,而MapReduce 1 则会有这样的问题。如果能够获得运行任务的资源,那么应用就会正常进行。

        更进一步,YARN中的资源是精细化管理的,这样一个应用能够按需请求资源,而不是请求一个不可分割的,对于特定的任务而言可能会太大(浪费资源)或太小(可能会导致失败的)的slot。

多租户(Multitenancy)

        在某种程度上,可以说YARN的最大优点在于向MapReduce以外的其他类型的分布式应用开放了Hadoop。MapReduce仅仅是许多YARN应用中的一个。

        用户甚至可以在同一个YARN集群上运行不同版本的MapReduce,这使得升级MapReduce的过程更好管理。(注意,MapReduce的一些部件,例如作业历史服务器和shuffle句柄,和YARN自身一样,仍然需要在集群范围内升级。

你可能感兴趣的:(#,Hadoop)