以前在Hadoop 1.0中JobTracker主要完成两项功能:资源的管理和作业控制。在集群规模过大的场景下,JobTracker
存在以下不足:

1)JobTracker 单点故障。

2)JobTracker 承受的访问压力大,影响系统的扩展性。

3)不支持MapReduce之外的计算框架,比如Storm、Spa rk、Flink



因此在YARN的设计中,资源的管理和作业控制是分离开的。取代JobTracker的是ResourceManager、ApplicationMaster两个部分。



  ● Resource Manager是一个全局的资源管理器 ,它做的事情是调度、启动每一个Job所属的ApplicationMaster、另外监控ApplicationMaster的存在情况。注:RM只负责监控AM,在AM运行失败时候启动它,RM并不负责AM内部任务的容错,这由AM来完成。(是通过RM中的applicationManager来完成的)

  ● ApplicationMaster是每一个Job(不是每一种)都有的一个部分,ApplicationMaster可以运行在ResourceManager以外的机器上,每个应用程序对应一个ApplicationMaster。。

  ● NodeManager是ResourceManager的在每个节点的代理,负责 Container 状态的维护,并向RM保持心跳。

  ● 另外,YARN使用Container对资源进行抽象,它封装了某个节点上一定量的资源(现在YARN仅支持CPU和内存两种资源)。当AM向RM申请资源时,RM为AM返回的资源使用Container表示。YARN会为每个任务分配一个或多个Container,且该任务只能使用该Container中描述的资源。(注:AM也是运行在一个Container中),)目前可以支持多种计算框架运行在YARN上面,比如MapReduce、Storm、Spark、Flink。



说明一下container

Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。



要使用一个 YARN 集群,首先需要来自包含一个应用程序的客户的请求。



YARN设计的优点

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

      ○ YARN的设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。

      ○ 老的框架中,JobTracker一个很大的负担就是监控job下的tasks的运行状况,现在,这个部分就扔给ApplicationMaster做了而ResourceManager中有一个模块叫做ApplicationsManager(ASM),它负责监测ApplicationMaster的运行状况。

  ● 能够支持不同的计算框架



工作原理







mapreduce on yarn







ARN的不足与展望

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

  ● 各个应用无法感知集群整体资源的使用情况,只能等待上层调度推送信息。

  ● 资源分配采用轮询、ResourceOffer机制(mesos),在分配过程中使用悲观锁,并发粒度小。

  ● 缺乏一种有效的竞争或优先抢占的机制。

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

  ● 简化了双层调度器中的全局资源管理器,改为由一个Cell State来记录集群内的资源使用情况,这些使用情况都是共享的数据,以此来达到与全局资源管理器相同的效果。

  ● 所有任务访问共享数据时,采用乐观并发控制方法。

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

YARN中自己总结的几个关键点的更多相关文章

  1. Hadoop YARN中内存的设置

    在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离.R ...

  2. Yarn中的几种状态机

    1 概述 为了增大并发性,Yarn采用事件驱动的并发模型,将各种处理逻辑抽象成事件和调度器,将事件的处理过程用状态机表示.什么是状态机? 如果一个对象,其构成为若干个状态,以及触发这些状态发生相互转移 ...

  3. 【原创】大叔经验分享(21)yarn中查看每个应用实时占用的内存和cpu资源

    在yarn中的application详情页面 http://resourcemanager/cluster/app/$applicationId 或者通过application命令 yarn appl ...

  4. Yarn中几个专用名称

    1. ResourceManager(RM)          RM是一个全局的资源管理器,负责整个系统的资源管理和分配.它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Appli ...

  5. YARN 中的应用程序提交

    YARN 中的应用程序提交 本节讨论在应用程序提交到 YARN 集群时,ResourceManager.ApplicationMaster.NodeManagers 和容器如何相互交互.下图显示了一个 ...

  6. YARN中的失败分析

    YARN中的失败分析 对于在YARN中运行的MapReduce程序,需要考虑以下几种实体的失败任务.application master.节点管理器.资源管理器 1. 任务运行失败 任务运行失败类似于 ...

  7. Guava com.google.common.base.Stopwatch Spark程序在yarn中 MethodNotFound

    今天在公司提交一个Spark 读取hive中的数据,写入JanusGraph 的app,自己本地调试没有问题,放入环境中提交到yarn 中时,发现app 跑不起. yarn 中日志,也比较明显,app ...

  8. Spark On Yarn中spark.yarn.jar属性的使用

    今天在测试spark-sql运行在yarn上的过程中,无意间从日志中发现了一个问题: spark-sql --master yarn // :: INFO Client: Requesting a n ...

  9. YARN中FIFO、Capacity以及Fari调度器的详细介绍

    (1)FIFO Scheduler 将所有的Applications放到队列中,先按照作业的优先级高低.再按照到达时间的先后,为每个app分配资源.如果第一个app需要的资源被满足了,如果还剩下了资源 ...

随机推荐

  1. 孙鑫MFC学习笔记2:C++回顾

    1.通常可以把实例与对象等同起来 2.函数重载是发生在同一个类中的 3.函数的覆盖是发生在父类与子类之间的(函数被覆盖后可以使用父类的类名加作用域操作符::) 4.含有纯虚函数的类叫抽象类,抽象类无法 ...

  2. Struts2例子

    (1)用MyEclipse建立一个Web Project,项目名称为myStruts2,结构如下图: (2)导入struts2需要的包,我是把解压后的struts-2.3.16.3\apps\stru ...

  3. [教学] 将 Form 内的控件变成 Style 简易运用

    1. 在 Form 上放一个 TImage ,再一个 TText 到 Image 里面,并将 Image1.StyleName 设定为 BtnStyle,如下: 2.接着放一个 TButton,将 S ...

  4. myeclipse中的文件内容被覆盖如何恢复

    今天无意中,运行文件把原先的文件给覆盖掉了,通过查阅资料发现可以通过这样去恢复 点击被覆盖后的文件------->右击--------->选择replace with------>p ...

  5. mysql乱码解决

    在 /etc/my.cnf加上下面二句: skip-character-set-client-handshakecharacter-set-server = utf8

  6. DDD开发框架ABP之本地化/多语言支持

    本地化(Localization)也就是多语言功能,借此用户能够选择他的母语或熟悉的语言来使用系统,这显然非常有利于软件系统推向国际化.一个应用程序的UI界面至少有一种语言,DDD开发框架ABP就提供 ...

  7. HTML自学基础

    关于自学HTML中遇到的各类细节问题 1.<a>表示链接标签,类似的有<img src>.链接的地址在<base>中填写.<base href="h ...

  8. JS Nice – JavaScript 代码美化和格式化工具

    JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ...

  9. 8款适合乐队、歌手和音乐家免费 WordPress 主题

    这篇文章与大家分享8款适合乐队.歌手和音乐家免费 WordPress WordPress 音乐网站主题.WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许 ...

  10. 使用异步存储提升 Web 应用程序的离线体验

    localForage 是一个 JavaScript 库,通过使用简单的.类似 localStorage 风格的 API 实现异步存储,帮助你提升 Web 应用程序的离线经验(通过 IndexedDB ...