YARN与MRv1的对比


转载请注明出处:http://www.cnblogs.com/BYRans/

Hadoop 1.0存在的问题

由于Hadoop 1.0的良好特性,Hadoop 1.0被应用到了各行各业。但是Hadoop的最初设计是为了用于搜索引擎业务(如Yahoo、Google等公司),其最初的设计中存在的一些问题逐渐凸现出来。主要存在以下几个方面:

  • 存在单点故障,影响可扩展性和稳定性
    Hadoop 1.0中HDFS的NameNode和MapReduce的JobTracker设计为单一节点,这将是整个系统的单点故障源(SPOF)。单点故障主要由以下两个原因导致:

    • NameNode内存消耗过大
      DataNode会定期向NameNode发送Block Report,这些数据是占用内存空间的,随着Hadoop集群存储空间的增多,这些Block Report会越来越多,因此NameNode的内存容量成为制约Hadoop集群的一个重要因素。
    • JobTracker内存消耗过大
      随着JobTracker处理的job数量的增长,任务数量也随着增长,从而导致JobTracker的内存消耗过大,同时任务失败的概率也随着增加。
  • 资源管理方案不灵活
    • slot数目无法动态修改。Hadoop 1.0采用了静态slot资源设置策略,即每个节点实现配置好可用的slot总数,这些slot数目一旦启动后无法再动态修改。
    • 资源无法共享。Hadoop 1.0将slot分为Map slot和Reduce slot两种,且不允许共享。对于一个作业,刚开始运行时,Map slot资源紧缺而Reduce slot空闲,当Map Task全部运行完成后,Reduce slot紧缺而Map slot空闲。很明显,这种区分slot类别的资源管理方案在一定程度上降低了slot的利用率。
    • 资源划分粒度粗糙。这种基于slot的资源划分方法的划分粒度仍过于粗糙,往往会造成节点资源利用率过高或者过低。比如,Hadoop默认为每个slot分配2G内存和1个CPU,如果一个应用程序的任务只需要1GB内存,则会产生“资源碎片”,从而降低集群资源的利用率;同样,如果一个应用程序的任务需要3GB内存,则会隐式地抢占其他任务的资源,从而产生资源抢占现象,可能导致集群利用率过高。另外,slot只是从内存和CPU的角度对资源进行分配,在实际系统中,资源本身是多维度的,例如:CPU、内存、网络I/O和磁盘I/O等。
    • 没引入有效的资源隔离机制。Hadoop 1.0仅采用了基于jvm的资源隔离机制,这种方式仍过于粗糙,很多资源,比如CPU,无法进行隔离,这会造成同一个节点上的任务之间干扰严重。
  • 计算模式单一。只支持MapReduce模式,不能有效的支持Storm、Spark等计算框架。

举个栗子,假设Hadoop 1.0同时运行10个job,每个job有100个task,假设每个task运行在不同的机器上,那么,就有10000个几点在同时运行。如果每个节点(即每个task)每个5分钟向JobTracker发送心跳,那么JobTracker节点的压力会特别大,所以正常情况下Hadoop 1.0的集群规模只能达到4000台左右。JobTracker压力过重也是造成Hadoop 1.0单点故障和可扩展性差的重要原因。

YARN的改进

在Hadoop 1.0中JobTracker主要完成两项功能:资源的管理和作业控制。在集群规模过大的场景下,JobTracker压力过重,因此在YARN的设计中,资源的管理和作业控制是分离开的。取代JobTracker的是ResourceManager、ApplicationMaster、NodeManager三个部分。如下图所示:

  • Resource Manager是一个全局的资源管理器 ,它做的事情是调度、启动每一个Job所属的ApplicationMaster、另外监控ApplicationMaster的存在情况。注:RM只负责监控AM,在AM运行失败时候启动它,RM并不负责AM内部任务的容错,这由AM来完成
  • ApplicationMaster是每一个Job(不是每一种)都有的一个部分,ApplicationMaster可以运行在ResourceManager以外的机器上。
  • NodeManager是ResourceManager的在每个节点的代理,负责 Container 状态的维护,并向RM保持心跳。
  • 另外,YARN使用Container对资源进行抽象,它封装了某个节点上一定量的资源(现在YARN仅支持CPU和内存两种资源)。当AM向RM申请资源时,RM为AM返回的资源使用Container表示。YARN会为每个任务分配一个或多个Container,且该任务只能使用该Container中描述的资源。注:AM也是运行在一个Container中

YARN设计的优点

  • 将资源管理和作业控制分离,减小JobTracker压力

    • YARN的设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
    • 老的框架中,JobTracker一个很大的负担就是监控job下的tasks的运行状况,现在,这个部分就扔给ApplicationMaster做了而ResourceManager中有一个模块叫做ApplicationsManager(ASM),它负责监测ApplicationMaster的运行状况。
  • 能够支持不同的计算框架
    将计算框架和底层存储调度分开,以支持更多的计算框架。在YARN中ApplicationMaster是一个可变更的部分,用户可以对不同的计算框架写自己的 AppMst,让更多类型的计算框架能够跑在Hadoop集群中,可以参考YARN官方配置模板中的mapred-site.xml配置。
  • 资源管理更加合理
    • 使用Container对资源进行抽象,Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的,比之前以slot数目更合理。
    • 且使用了轻量级资源隔离机制Cgroups进行资源隔离。
    • Container的设计避免了之前的map slot/reduce slot分开造成集群资源闲置的尴尬情况。

YARN与Mesos的对比

  Mesos YARN
框架担任的角色 各个计算框架需在Mesos中部署后才能使用,完全融入到Mesos中 计算框架只是作为客户端的库使用,不在YARN中部署即可使用
调度机制 双层调度;第一层由Mesos Master将空闲资源分配给框架,第二层由各个框架自带的调度器对资源的使用进行分配 双层调度,第一层由RM分配资源,第二层再对框架的任务进行调度
资源分配 先粗粒度分配,再细粒度分配 细粒度分配
资源隔离性 采用Linux Container对内存和CPU两种资源进行隔离 当前采用OS进程级别隔离
扩展性 支持6,000 ~ 50,000个节点 目标是支持6,000 ~ 100,000个节点

YARN的不足与展望

YARN是一个双层调度器(Two-level scheduler),解决了中央调度器(Monolithic scheduler)的不足(中央调度器典型的代表就是JobTracker),双层调度架构看上去为调度增加了灵活性和并发性,但实际上它保守的资源可见性和上锁算法(使用悲观并发)也限制了灵活性和并发性。第一,保守的资源可见性导致各框架无法感知整个集群的资源使用情况,有空闲资源无法通知排队的进程,容易造成资源的浪费;第二,上锁算法降低了并发性,调度器会将资源分配给一个架构,只有该架构返回资源后,调度器才回将该部分资源分配给其他架构,在第一个分配过程中,资源相当于被锁住,从而降低了并发性。总结来说,YARN同其他双层架构的调度器(例如:Mesos)都有的不足为:

  • 各个应用无法感知集群整体资源的使用情况,只能等待上层调度推送信息。
  • 资源分配采用轮询、ResourceOffer机制(mesos),在分配过程中使用悲观锁,并发粒度小。
  • 缺乏一种有效的竞争或优先抢占的机制。

为了改善双层调度系统的的不足,尤其是各个应用无法感知集群整体资源的使用情况和悲观加锁控制导致的并发性不高这两个不足,共享状态调度器(Shared State Scheduler)被越来越多的人所重视,其中最具代表性的就是Google的Omega。共享状态调度器在双层调度器的基础上做了改进:

  • 简化了双层调度器中的全局资源管理器,改为由一个Cell State来记录集群内的资源使用情况,这些使用情况都是共享的数据,以此来达到与全局资源管理器相同的效果。
  • 所有任务访问共享数据时,采用乐观并发控制方法。

共享调度器也存在不足。例如,当某一资源被不同任务同时访问时容易产生冲突,访问的任务越多时,冲突次数就会越多,冲突次数越高调度器的性能下降越快,这将影响调度器的工作效率和工作性能。

YARN与MRv1的对比的更多相关文章

  1. [yarn]yarn和npm的对比

    一.简介 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服 ...

  2. YARN与MapReduce1的对比

    Apache YARN (Yet Another Resource Negotiator)从Hadoop2开始.YARN为集群提供资源管理和Applications的调度.YARN的API用于操作集群 ...

  3. yarn和npm的对比以及yarn的使用

    0--前言 为什么要使用yarn,如果你从事前端开发有些年头了,那你肯定对npm又爱又恨,爱就不说了,恨嘛,就是NPM经常奇慢和卡顿,这还能忍,经常各种错误就没法忍了,尤其是他人创建的项目,自己在安装 ...

  4. yarn和npm的对比,以及项目中使用方式

    相比npm 的优点 1.npm安装是串行,而yarn是并行,速度大大提升 2.已经下载过的包会被缓存,无需重复下载,更关键的是,支持离线安装 3.精准的版本控制,加上验证每个包的完整性,保证每次安装的 ...

  5. yarn和npm命令对比

  6. YARN基本框架介绍

    YARN基本框架介绍 转载请注明出处:http://www.cnblogs.com/BYRans/ 在之前的博客<YARN与MRv1的对比>中介绍了YARN对Hadoop 1.0的完善.本 ...

  7. Blog List

    Blog List Spark Spark官方文档 - 中文翻译 Spark快速入门 - Spark 1.6.0 Spark SQL 官方文档-中文翻译 Spark SQL 之 Migration G ...

  8. Yarn框架和工作流程研究

    一.概述     将公司集群升级到Yarn已经有一段时间,自己也对Yarn也研究了一段时间,现在开始记录一下自己在研究Yarn过程中的一些笔记.这篇blog主要主要从大体上说说Yarn的基本架构以及其 ...

  9. YARN学习总结

    YARN学习总结 前言 YARN(Yet Another Resource Manage,另一种资源协调者)是hadoop-0.23版本引入的的一个新的特性,可以说它是对原有Hadoop Mapred ...

随机推荐

  1. 解决ArcGIS中因SDE或数据库配置问题而导致服务宕掉的一种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 最近连续有两个项目现场出现了AGS服务荡掉的问题,一个是通州 ...

  2. java.util.ConcurrentModificationException异常处理

    ConcurrentModificationException异常处理 ConcurrentModificationException异常是Iterator遍历ArrayList或者HashMap数组 ...

  3. DirectShow Filter的开发实践

    一.介绍 摄像头图像采集处理在业界有着多种成熟的方案.从老的DirectShow.Grabber技术,到新的Windows Media Foundation框架,网络上都有着丰富的参考资料.OpenC ...

  4. C#遍历文件夹下所有文件

    FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...

  5. ASP.NET MVC 了解FileResult的本质

    FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端.ASP.NET MVC定义了三个具体的FileResult,分 ...

  6. iis配置出现处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”问题

    最近重新由于一些问题要安装vs2015和oracle所以就重装了电脑,吧项目发布到本地的iis上的时候出现问题了, 像之前出现的问题一般都是重装电脑后,安装vs的时候,是先安装了vs,之后再Windo ...

  7. EF配置模型

    配置方法 EF里面的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面,还有 ...

  8. 为什么,node_body.firstChild找不到table节点

    在Firefox下,会把空格或者换行,当成一个文本节点.因此所有标记之间的空格和换行都去掉.

  9. ubuntu 12.04 LTS 如何使用更快的更新源

    装好ubuntu系统后的第一见事就是替换自带的更新源,原因是系统自带的源有些在中国访问不了,可以访问的速度又特别慢.幸好国内的一些公司和大学提供了速度不错的更新源.下面介绍如何使用更快的更新源 方法/ ...

  10. C#-Socket监听消息处理

    TCP/IP:Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议,又名网络通讯协议.简单来说:TCP控制传输数据,负责发现传输 ...