目的

此文档描写叙述了 FairScheduler,
Hadoop 的一个可插入式的调度器。同意 YARN 应用在一个大集群中公平地共享资源。

简单介绍

公平调度是一种分配资源给应用的方法,以致到最后。平均上全部应用获得相等的资源。  Hadoop NextGen 可以调度多种类型的资源。

默认的, Fair Scheduler 仅以内存为基础作公平调度决策。可以用Ghodsi 等开发的 Dominant
Resource Fairness 概念配置调度内存和CPU。

仅有一个应用执行时,这个应用使用整个集群。

别的应用提交了之后。空出来的资源就分配给新的应用。以便每一个应用终于都能获得大致相等数量的资源。 不像默认的Hadoop 调度器把应用组成一个队列,这个让短的应用在合理的时间内完毕,而长时间的应用则不会饥渴(?

)。这也是一个合理的方式在多用户中分享一个集群的方式。最后,公平分享能够应用于应用优先级——优先级用于决定每一个应用能够得到的资源部分的权重。

调度器进一步会把应用组织到 “队列”中。并在这些队列间公平地分享资源。默认的,全部的用户分享一个叫做“默认”的单独的队列。假设一个应用特别地在一个容器资源请求中列出一个队列。请求就提交给那个队列。也有可能基于通过请求配置username字来分配队列。在每一个队列中,一个调度政策用来在执行着的应用间共享资源。默认是基于内存的公平调度,可是FIFO和Dominant
Resource Fairness的多资源也会被配置。队列会被组织在一个层级中,以指定的比例分享集群分配资源和权重配置。

除了提供公平分享之外,Fair Scheduler 同意分配给队列最小的共享保证。对于确保确定的用户、组或生产应用总能获得充足的资源很实用。

当一个队列包括应用。它至少能获得最小的分享,可是当队列不须要它的所有保证的分享,超过的部分就会在别的执行中的应用中分配。

当这些队列不包括应用时,这让调度器保证队列容量同一时候要有效地使用资源。

Fair Scheduler 让全部的应用默认地执行,可是也有可能通过配置文件限制每一个用户和每一个队列的执行中的应用的数量。当一个用户必需要马上提交数百个应用,或假设同一时候执行太多应用还要提升性能。可能导致生成太多的中间数据或太多的上下文切换时,这很实用。应用限制不会引起不论什么随后提交的应用失败,仅仅会在调度器队列中等待直到一些用户的之前的应用执行完毕。

可插入式的层级队列

公平调度器支持层级队列。

全部的队列继承自一个叫做“root”的队列。在典型的调度样式中,可用的资源分布在根队列的子队列中。然后。子队列以相同的方式分布资源到他们的子队列中。应用可能仅仅被安排在左队列中。队列会被指定为别的队列的子队列。通过在公平调度器分配文件里把它们放到他们父队列的子元素中。

一个队列的名字以其父队列的名字開始,以周期(?)作为分隔符。所以一个在根队列下的名叫“queue1”的队列,会被写为 "root.queue1",
在一个名叫"parent1"的一个名叫 "queue2" 的队列将会被写为 "root.parent1.queue2"。

当參考(?)队列。根部分是可选的。所以queue1能够仅写为 "queue1", queue2 仅写为 "parent1.queue2".

还有,公平调度器同意为每一个队列设置一个自己定义的政策。同意用户能以不论什么他想要的方式使用队列资源。一个自己定义的政策能够通过继承 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy
来创建。
 FifoPolicy, FairSharePolicy (默认的), 和 DominantResourceFairnessPolicy 是内置的。随时等待使用。

在原来的(MR1)Fair Scheduler 中的某些附件还没有被支持。

在当中,在某些应用中,自己定义政策管理优先级“推动”。(?)

安装

要使用 Fair Scheduler ,首先在 yarn-site.xml 分配合适的调度器类:

<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>

配置

自己定义 Fair Scheduler 一般涉及改动两个文件。首先,调度器端选项能够通过在你的现存配置文件夹中的yarn-site.xml中加入配置属性来设置。其次,大多数情况下。用户会想要创建一个包括队列各自的权重和容量的分配文件列表。

分配文件每10秒重载一次。同意动态改动。

属性能够放在 yarn-site.xml 中

  • yarn.scheduler.fair.allocation.file

    • 分配(配置)文件的路径.一个分配文件是一个XML清单,描写叙述了队列及其属性。还有默认的政策。这个文件必须是下一节中描写叙述的XML格式。假设给定了一个相对路径,文件就会在classpath(一般包括Hadoop conf 文件夹)上被搜索。默认是 fair-scheduler.xml.
  • yarn.scheduler.fair.user-as-default-queue
    • 不管是否用与分配相关联的username作为默认的队列名,其实队列的名字并没有被指定。假设这被设置为 "false" 或是没有设置。全部的job共享一个默认的队列,叫做 "默认". 默认是 true.
  • yarn.scheduler.fair.preemption
    • 是否使用预占有。

      注意 preemption 在当前版本号中是实验性质的。

      默认是 false.

  • yarn.scheduler.fair.sizebasedweight
    • 是否基于应用的规模分配共享给单独的应用,还是提供同样大小的共享给全部的应用,而不考虑他们的规模。

      若设置为true,将通过一个应用请求的总内存的自然对数除以2来给应用赋予权重。默认是2.

  • yarn.scheduler.fair.assignmultiple
    • 是否同意在多个容器分配存在一个心跳。默认是false。
  • yarn.scheduler.fair.max.assign
    • 假设多个分配是true,最大数量的容器将被分配一个心跳。默认是 -1, 代表没有限制。
  • yarn.scheduler.fair.locality.threshold.node
    • 对于在特定节点上请求容器的应用,从上一个容器分配到等待还有一个节点上的调度机会的数量。记为0-1的浮点数。是集群规模的比例,是向上传递的调度机会的数量。

  • yarn.scheduler.fair.locality.threshold.rack
    • 对于在特定机架上请求容器的应用。从上一个容器分配到等待还有一个节点上的调度机会的数量。记为0-1的浮点数。是集群规模的比例,是向上传递的调度机会的数量。

      默认值是-1。意思是不传递不论什么调度机会。

分配文件的格式

分配文件必须是 XML 格式。这个格式包括五种元素:

  • Queue 元素, 代表队列. 每一个可能包括以下的属性:

    • minResources: minimum resources the queue is entitled to, in the form "X mb, Y vcores". For the single-resource fairness policy, the vcores value is ignored.
      If a queue's minimum share is not satisfied, it will be offered available resources before any other queue under the same parent. Under the single-resource fairness policy, a queue is considered unsatisfied if its memory usage is below its minimum memory share.
      Under dominant resource fairness, a queue is considered unsatisfied if its usage for its dominant resource with respect to the cluster capacity is below its minimum share for that resource. If multiple queues are unsatisfied in this situation, resources go
      to the queue with the smallest ratio between relevant resource usage and minimum. Note that it is possible that a queue that is below its minimum may not immediately get up to its minimum when it submits an application, because already-running jobs may be
      using those resources.
    • maxResources: maximum resources a queue is allowed, in the form "X mb, Y vcores". For the single-resource fairness policy, the vcores value is ignored.
      A queue will never be assigned a container that would put its aggregate usage over this limit.
    • maxRunningApps: limit the number of apps from the queue to run at once
    • weight: to share the cluster non-proportionally with other queues. Weights default to 1, and a queue with weight 2 should receive approximately twice as
      many resources as a queue with the default weight.
    • schedulingPolicy: to set the scheduling policy of any queue. The allowed values are "fifo"/"fair"/"drf" or any class that extendsorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy.
      Defaults to "fair". If "fifo", apps with earlier submit times are given preference for containers, but apps submitted later may run concurrently if there is leftover space on the cluster after satisfying the earlier app's requests.
    • aclSubmitApps: a list of users that can submit apps to the queue. A (default) value of "*" means that any users can submit apps. A queue inherits the ACL
      of its parent, so if a queue2 descends from queue1, and user1 is in queue1's ACL, and user2 is in queue2's ACL, then both users may submit to queue2.
    • minSharePreemptionTimeout: number of seconds the queue is under its minimum share before it will try to preempt containers to take resources from other
      queues.
  • User 元素, 代表管理单独用户行为的设置。

    他们能够包括一个单独的属性: maxRunningApps, 指定用户的执行应用数量限制。

  • 一个 userMaxAppsDefault 元素, 假设没有特别指定,设置了每一个用户的默认执行应用限制。

  • 一个 fairSharePreemptionTimeout 元素, 一个队列在尝试从其它队列抢占资源容器前,其公平分享下的秒数。
  • 一个 defaultQueueSchedulingPolicy 元素, 为队列设置了默认的调度政策:假设在每一个队列的schedulingPolicy 元素中指定就会被覆盖。默认是
    "fair".

    以下是分配文件的一个样例:

    <?xml version="1.0"?>
    <allocations>
    <queue name="sample_queue">
    <minResources>10000 mb,0vcores</minResources>
    <maxResources>90000 mb,0vcores</maxResources>
    <maxRunningApps>50</maxRunningApps>
    <weight>2.0</weight>
    <schedulingPolicy>fair</schedulingPolicy>
    <queue name="sample_sub_queue">
    <minResources>5000 mb,0vcores</minResources>
    </queue>
    </queue>
    <user name="sample_user">
    <maxRunningApps>30</maxRunningApps>
    </user>
    <userMaxAppsDefault>5</userMaxAppsDefault>
    </allocations>

    注意。因为对之前的 FairScheduler 的后向兼容, "queue" 元素能够被 "pool" 元素取代.

管理

公平调度器提供了对执行时管理的两种机制的支持:

  • 通过编辑分配文件。能够改动最低共享、限制、权重、预占有时间差和队列调度政策。调度器会在知道此文件改动了之后10-15秒后会重载它。

  • 当前应用、队列和公平分享能够通过 ResourceManager的 web 界面检查,地址是 http://ResourceManager URL/cluster/scheduler.

    以下的每一个队列的域能够在web界面上查看:

  • 用过的资源 - 在队列内分配给容器的资源总和。

  • 活着的应用的数量 - 队列中的至少接到一个容器的应用的数量。
  • 待执行的应用的数量 - 队列中的还未接到不论什么容器的应用的数量。

  • 最低资源 - 保证给一个队列的配置了的最低资源。
  • 最大资源 - 同意给一个队列的配置了的最大资源。
  • 公平分享 - 队列的公平分享资源。当别的队列不在使用的时候,队列可能会被分配超过他们的公平分享的资源。

    一个队列的资源消耗刚好等于或低于它的公平分享的话。它的容器永远不会预占有(?)。

    ResourceManager 要正确地展示每个应用程序的附加信息,web 包括公平分享应用程序界面。

Hadoop-2.2.0中国文献—— MapReduce 下一代 -- 公平调度的更多相关文章

  1. Hadoop-2.2.0中国文献——MapReduce 下一代 —配置单节点集群

    Mapreduce 包 你需从公布页面获得MapReduce tar包.若不能.你要将源代码打成tar包. $ mvn clean install -DskipTests $ cd hadoop-ma ...

  2. Hadoop-2.2.0中国文档—— MapReduce 下一代 -- 公平调度

    目的 此文档描写叙述了 FairScheduler, Hadoop 的一个可插入式的调度器,同意 YARN 应用在一个大集群中公平地共享资源. 简单介绍 公平调度是一种分配资源给应用的方法.以致到最后 ...

  3. Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器

    目的 这份文档描写叙述 CapacityScheduler,一个为Hadoop能同意多用户安全地共享一个大集群的插件式调度器,如他们的应用能适时被分配限制的容量. 概述 CapacitySchedul ...

  4. Hadoop-2.2.0中国文献—— Web应用代理

    Web应用代理是YARN的一部分. 默认地,它会作为 Resource Manager(RM)的一部分来执行, 可是也能够配置成独立执行的模式.使用代理的原因就是减少通过YARN的web攻击的可能性. ...

  5. Ubuntu14.04用apt在线/离线安装CDH5.1.2[Apache Hadoop 2.3.0]

    目录 [TOC] 1.CDH介绍 1.1.什么是CDH和CM? CDH一个对Apache Hadoop的集成环境的封装,可以使用Cloudera Manager进行自动化安装. Cloudera-Ma ...

  6. mac OS X Yosemite 上编译hadoop 2.6.0/2.7.0及TEZ 0.5.2/0.7.0 注意事项

    1.jdk 1.7问题 hadoop 2.7.0必须要求jdk 1.7.0,而oracle官网已经声明,jdk 1.7 以后不准备再提供更新了,所以趁现在还能下载,赶紧去down一个mac版吧 htt ...

  7. eclipse/intellij idea 远程调试hadoop 2.6.0

    很多hadoop初学者估计都我一样,由于没有足够的机器资源,只能在虚拟机里弄一个linux安装hadoop的伪分布,然后在host机上win7里使用eclipse或Intellj idea来写代码测试 ...

  8. Hadoop 2.2.0部署安装(笔记,单机安装)

    SSH无密安装与配置 具体配置步骤: ◎ 在root根目录下创建.ssh目录 (必须root用户登录) cd /root & mkdir .ssh chmod 700 .ssh & c ...

  9. Hadoop:使用Mrjob框架编写MapReduce

    Mrjob简介 Mrjob是一个编写MapReduce任务的开源Python框架,它实际上对Hadoop Streaming的命令行进行了封装,因此接粗不到Hadoop的数据流命令行,使我们可以更轻松 ...

随机推荐

  1. ASP.NET - 无限极分类

    下拉列表-------- 数据库设计: -- 无限分类 -- -- 数据库:DB_InfiniteCategory -- 数据表:Tb_Infinite ----------------------- ...

  2. 搭建Go开发及调试环境(LiteIDE + GoClipse)

    搭建Go开发及调试环境(LiteIDE + GoClipse) -- Windows篇 这里以Windows7 64位为例,如果是32位环境需安装对应版本程序. 一.安装golang1.2.2 1.3 ...

  3. ASP.NET - 服务器控件button 先执行js 再执行后台的方法

    关于button这个服务器控件,我一直想减少它向服务器提交数据.那些检测,还是在客户端实现就好了.这就需要javascript,但是我发现仅仅有javascript还是不够的.button服务器控件的 ...

  4. JSP的学习(4)——中文乱码的解决

    本篇将以JSP页面中可能存在的中文乱码问题进行分析和解决. 中文乱码的问题一直是国人在编程过程中的一大头疼问题,这点上在JSP.Servlet或Tomcat上随处可见.比如我们在写一个Servlet时 ...

  5. 每日一帖示例程序(使用TWebBrowser基于HTML做)

    最近在程序中增加了每日一帖的功能,搜索一下网站的程序,发现大部分是用Memo实现,而我用的是TWebBrowser基于HTML做,故帖出来共享一下. PAS源码: unit Unit1; interf ...

  6. 怎样使用jstack诊断Java应用程序故障(转)

    最近一段时间,我们的生产系统升级频繁出现故障,具体故障现象是启动后10来分钟就出现交易缓慢,处理线程耗尽等现象,并且故障发生的频率蛮高的.经过详细的诊断和排查,终于发现了问题,是groovy在osgi ...

  7. hadoop学习之ZooKeeper

    1. 什么是ZooKeeper? ZooKeeper是一组工具,用来配置和支持分布式调度. 它能处理分布式应用的“部分失败”问题. 什么是部分失败? 部分失败是分布式处理系统的固有特征,即发送者无法知 ...

  8. CF 258B Little Elephant and Elections [dp+组合]

    给出1,2,3...m 任取7个互不同样的数a1,a2,a3,a4,a5,a6,a7 一个数的幸运度是数位上4或7的个数 比方244.470幸运度是2. 44434,7276727.4747,7474 ...

  9. Marshal UTF8 Strings in .NET

    原文:Marshal UTF8 Strings in .NET Marshal UTF8 Strings in .NET Wow, what a pain in the butt. .NET stri ...

  10. Mysql对自增主键ID进行重新排序

    Mysql数据库表的自增主键ID号经过一段时间的添加与删除之后乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name ...