以前在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. 基于吉日嘎底层架构的Web端权限管理操作演示-日志管理

    权限管理要实现的效果是对“ 谁”可以访问“什么内容”,可以进行“哪些操作” 一系列权限的精细化控制.衡量一个软件好坏的重要标准是:它的权限体系是否足够细致.是否可以立体勾勒出信息对象的访问控制.前面4 ...

  2. jquery内容选择器(根据内容匹配元素)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Android存储空间不足的解决办法

    安装应用时,有时会出现错误Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE,这是存储空间不足的错误,这时就只能将应用安装到SD卡,在And ...

  4. c++之string.find(string)

    先来看一个例子吧: #include "iostream" #include "string" using namespace std; // 定义函数求str ...

  5. Array数组基础

    数组的定义 数组(array)是按次序排列的一组值,单个值称为元素,它们的位置都有编号(从0开始).整个数组用方括号表示. var arr = ['a', 'b', 'c']; 上面代码中的a.b.c ...

  6. jquery学习笔记:获取下拉框的值和下拉框的txt

    <div class="form-group"> <select class="form-control" id="iv_level ...

  7. <welcome-file-list>标签的控制作用以及在springmvc中此标签的的配置方式

    我们在写安全性较高的网站时必然会对网站的入口进行限制, 而在这其中其关键作用的就是网站的根目录下WEB-INF中的web.xml中<welcome-file-list>  <welc ...

  8. FormatJS – 让你的 Web 应用程序国际化

    FormatJS 是一个模块化的集合,保护各种 JavaScript 国际化库,例如格式化数字,日期和字符串.它包括一组建立在 JavaScript 的国际内置插件和全行业的国际化标准,再加上一套集成 ...

  9. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  10. 实例之JavaScript

    使用JavaScript实现5秒倒计时 <html> <head> <meta charset="utf-8"> <title>&l ...