目的

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

概述

CapacityScheduler 被设计成以分享的、多用户集群执行 Hadoop 应用并最大化利用集群的机制。

传统上。每一个组织都会有它自己的私有电脑资源,在顶峰或接近顶峰状态有充足的容量来面对组织的SLA。这通常导致低平均利用和管理多个独立集群的管理费用,每一个集群要有一个。

组织间共享安装在Hadoop的集群是一种低成本的方式,同意他们得到规模经济利益,而不用创建私有集群。然而。组织关心共享一个集群是由于他们操心别人使用对他们的SLA重要的资源。

CapacityScheduler被设计成同意每一个组织的容量保证。来共享一个大的集群。

当中心思想是 Hadoop集群中的可用资源是基于他们的计算须要多个组织间共享的。有一个额外优点是一个组织能得到不论什么别的用户没有在使用的容量。

这在一个有效支出模式中为组织提供了弹性。

跨组织间共享集群的必要性是支持多用户。由于每一个组织必须被保证容量和安全以确保共享的应用。

CapacityScheduler 提供了一个严格的限制以确保单应用或用户或队列不能以不合适的方式消费集群中的资源。

还有。 CapacityScheduler 提供了在用户在初始化/请求应用时的限制。以保证集群的稳定性。

 CapacityScheduler提供的主要抽象概念是  queues.
这些队列一般由管理员设置以经济地共享集群。

要对集群资源提供很多其它的控制和预測, CapacityScheduler 支持层级化队列以保证组织中共享的资源在别的队列之前能使用,对给定的组织间共享资源提供了友好性。

特性

 CapacityScheduler 支持例如以下的特性:

  • 层级化 队列 —— 支持队列层级化以保证在其它用户使用空暇资源之前,子队列中的资源由一个组织共享。从而提供很多其它的控制性和可预測性。
  • Capacity 保证 —— 就一个确定的资源容量安排而言。队列被分配成网格中的容量的一部分 。

    全部提交给一个队列的应用将对分配给队列的容量有使用权。

    管理者能够在每一个队列的分配容量上配置软限制和可选的硬限制。

  • 安全 —— 每一个队列有严格的ACLs。控制着那个用户能够像一个单独的队列提交应用。

    还有,有安全保障保证用户不能看 而且/或 改动来自别的用户的应用。另外,支持每一个队列和系统管理者角色。

  • 弹性 —— 闲置资源能够分配给不论什么超过其容量的队列。当以低容量正在执行的队列须要这些资源,随着在这些资源上的任务调度的完毕,他们将会被分配给以低容量执行的队列(不支持抢占)。

    这保证了队列能够有预測性的、弹性的获取资源,因而对避免在集群中为提高利用率,而对资源人工清仓。 

  • 多用户 —— 提供了全面的限制以防止一个独立应用、用户和队列垄断队列中的资源或作为一个总体的集群,以保证集群不被压垮。
  • 可移植性
    • 执行时配置 —— 队列定义和属性,如容量、ACLs能够在执行时被管理员以安全的方式改动,以最小化对用户的破坏。还有,提供给用户和管理员一个控制台来查看系统中当前不同队列的分配的资源。

      管理员能够在执行时加入额外的队列,可是队列不能在执行时删除。

    • Drain 应用 —— 管理员能够在执行时停止队列。以保证当现存的应用执行完毕前,没有新应用能够提交。假设一个队列是在STOPPED 状态, 新的应用不能提交给它或不论什么其子队列。已存在应用将继续到完毕,因此队列能够优雅地关闭。此时管理员能够启动关闭了的应用。

  • 基于资源调度 - 对资源集中的应用有支持,一个应用能够可选的指定比默认更高的资源须要,因而适应应用有不同的资源须要。当前,支持内存作为资源须要。

配置

  • 设置 ResourceManager 以用 CapacityScheduler
    ,在
    conf/yarn-site.xml中设置下列属性

    属性
    yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
  • 设置队列

    conf/capacity-scheduler.xml 是 CapacityScheduler
    的配置文件
    .

    CapacityScheduler 有一个提前定义的队列叫做  root. 系统中的全部队列都是root队列的子队列。

    另外的队列能够在配置 yarn.scheduler.capacity.root.queues
    用一些逗号分隔的子队列。

     CapacityScheduler 的配置使用一种叫做 queue path 的概念来配置队列的层级。 queue path 是队列层级的全路径。从 root
    開始
    , 以 . (点)作为分隔符。

    一个给定的队列的子队列能够用 knod配置: yarn.scheduler.capacity.<queue-path>.queues来定义。

    除非声明,子队列不直接继承父队列的属性。

    以下是一个有三个顶级队列a,b和c和一些a,b的二级队列的样例:

    <property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>a,b,c</value>
    <description>The queues at the this level (root is the root queue).
    </description>
    </property> <property>
    <name>yarn.scheduler.capacity.root.a.queues</name>
    <value>a1,a2</value>
    <description>The queues at the this level (root is the root queue).
    </description>
    </property> <property>
    <name>yarn.scheduler.capacity.root.b.queues</name>
    <value>b1,b2,b3</value>
    <description>The queues at the this level (root is the root queue).
    </description>
    </property>
  • 队列属性
    • 资源分配

      属性 描写叙述
      yarn.scheduler.capacity.<queue-path>.capacity 队列 容量 百分比 (%) 写为浮点数 (e.g. 12.5). 在每一层上,全部队列容量的总和,必须等于100。假设有闲置资源和弹性。队列中的应用可能消耗比队列容量很多其它的资源。
      yarn.scheduler.capacity.<queue-path>.maximum-capacity 写为浮点数的最大队列百分比 (%) .这个限制队列中应用的弹性。 默觉得 -1 ,即禁用之。
      yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent 在不论什么给定时间,假设有资源使用须要,每一个队列对一个用户执行一个资源分配百分比限制。用户限制会在一个最小值和最大值之间变动。

      前者(最小值) 设置给这个值,后者(最大值)根据已经提交了应用的用户的数量,比如,假设这个值是25。假设两个用户已经提交应用给一个队列。没实用户能够使用超过 50% 的队列资源。假设第三个用户提交了一个应用。没有一个用户能够使用超过 33% 的队列资源。有4或很多其它的用户,没实用户能够使用超过
      25% 的队列资源。

      值为100 则说明没实用户限制。默认值是100.

      yarn.scheduler.capacity.<queue-path>.user-limit-factor 队列容量中的多数能够配置为同意单用户获取很多其它的资源。默认的,这个设为 1 ,以保证单个用户永远不会占用超过队列配置容量。而不管不管集群如何闲置。此值声明为一个浮点数。
    • 执行和请求应用限制

      CapacityScheduler 支持以下的參数以控制正在和等待执行的应用:

      属性 描写叙述
      yarn.scheduler.capacity.maximum-applications /yarn.scheduler.capacity.<queue-path>.maximum-applications 系统中应用的最大数量。能够是当前激活的包含正在和等待执行的。每一个队列上的限制是他们的队列容量和用户限制的直接比例 。这是一个硬限制。而且当达到了限制,不论什么应用提交都会被拒绝。默认是 10000. 这个能够通过 yarn.scheduler.capacity.maximum-applications为全部队列设置,也能够被在每一个队列上的设置 yarn.scheduler.capacity.<queue-path>.maximum-applications
      覆盖
      .
      yarn.scheduler.capacity.maximum-am-resource-percent /yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent 集群中的最大资源比列能够用来执行应用master——控制当前激活的应用数量。每一个队列上的限制是他们的队列容量和用户限制的直接比例 。

      声明为一个浮点数——如0.5 =
      50%. 默认是 10%. 这个能够通过 yarn.scheduler.capacity.maximum-am-resource-percent 为全部队列设置。也能够被在每一个队列上的设置 yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent覆盖.

    • 队列管理和权限

      CapacityScheduler 支持例如以下的參数配置以管理资源:

      属性 描写叙述
      yarn.scheduler.capacity.<queue-path>.state 队列的状态。

      能够是RUNNING 和 STOPPED 中的一个。假设一个队列在 STOPPED 状态,新的应用不能提交给它或不论什么其子队列。因此,假设root 队列是 STOPPED 状态,则无应用能够提交给整个集群。已存在应用将继续到完毕,因此队列能够优雅地关闭。

      yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications  ACL 控制谁能够提交应用给一个给定的队列。假设给定的 用户/组 在给定的队列或层级中他们能够提交应用的父队列中的一个上有必要的 ACLs。

      假设没有特别声明,这个属性的 ACLs 继承于父队列。

      yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue ACL 控制谁能够 管理 给定队列上的应用。假设给定的 用户/组 在给定的队列或层级中他们能够管理应用的父队列中的一个上有必要的 ACLs。假设没有特别声明,这个属性的 ACLs 继承于父队列。

      注意: 一个 ACL 的格式是这样 user1, user2空格group1, group2. * 代表不论什么人.
      空格代表没有人。假设没有声明。对root队列,默认是 * 。

    • 回想 CapacityScheduler 的配置

      一旦完毕了安装配置, 在启动YARN集群后你能够在浏览器中检查。

      • 以正常方式启动 YARN 集群。
      • 启动 ResourceManager web UI.
      •  /scheduler 页面应该显示每一个队列的使用情况。

改变队列配置

改变队列属性和加入新队列非常easy。你须要编辑 conf/capacity-scheduler.xml 并执行 yarn
rmadmin -refreshQueues.

$ vi $HADOOP_CONF_DIR/capacity-scheduler.xml
$ $HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues

说明: 队列不能被删除,仅仅支持加入新队列——更新的配置应该合法。比如,每一层的队列容量应该是100%。

Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器的更多相关文章

  1. Hadoop-2.2.0中文文档—— MapReduce 下一代 - Encrypted Shuffle

    简单介绍 Encrypted Shuffle capability (加密洗牌功能? )同意用HTTPS 和 可选的client验证 (也称作双向的 HTTPS, 或有client证书的 HTTPS) ...

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

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

  3. Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置

    目的 这份文档描写叙述了怎样安装.配置和管理从几个节点到有数千个节点的Hadoop集群. 玩的话,你可能想先在单机上安装.(看单节点配置). 准备 从Apache镜像上下载一个Hadoop的稳定版本号 ...

  4. Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort

    简单介绍 可插入的 shuffle 和 sort 功能,同意在shuffle 和 sort 逻辑中用可选择的实现类替换.这个情况的样例是:用一个不是HTTP的应用协议,如RDMA来 shuffle 从 ...

  5. Apache Spark 2.2.0 中文文档

    Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN Geekhoo 关注 2017.09.20 13:55* 字数 2062 阅读 13评论 0喜欢 1 快速入门 使用 ...

  6. Apache Storm 1.1.0 中文文档 | ApacheCN

    前言 Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ...

  7. Django2.0中文文档

    title: Django2.0中文文档 tags: Python,Django,入沐三分 grammar_cjkRuby: true --- Django2.0版本已经发布了,我们先来看一个图片 从 ...

  8. webpack4.0中文文档踩坑记录

    一直没有正儿八经去看过webpack4.0的文档,前段时间工作比较轻松,于是就有了此文...面都这样一个问题:请问在您的开发生涯中,令你最痛苦最无奈的是什么?小生的回答只有一个:“阅读那些令人发指的文 ...

  9. PyTorch官方中文文档:torch.optim 优化器参数

    内容预览: step(closure) 进行单次优化 (参数更新). 参数: closure (callable) –...~ 参数: params (iterable) – 待优化参数的iterab ...

随机推荐

  1. eclipse 国际化 $NON-NLS-1$ 含义

    一.$NON-NLS-1$ 含义 Eclipse 如果每行代码里有这个字符串:$NON-NLS-1$ 表示:这一行的第一个字符串是不需要国际化的.同理$NON-NLS-2$,$NON-NLS-3$.. ...

  2. windows内核实现的34个关键问题

    http://book.kongfz.com/237217/670391178/#bookComm

  3. Docker 限制容器资源

     默认情况下,容器没有资源的限制,它可以使用整个主机的所有资源.Dcoker提供了控制资源的方法,  多少内存,CPU,IO,都可以在docker run使用标志符来设置.   内存 Docker可以 ...

  4. IOS7开发~错误收集

    1. fatal error: file '/Applications/Xcode5-DP.app/Contents/Developer/Platforms/iPhoneSimulator.platf ...

  5. c语言单链表实现

    /************************************************************************* > File Name: singleLin ...

  6. C 语言经典100例

    C 语言经典100例 C 语言练习实例1 C 语言练习实例2 C 语言练习实例3 C 语言练习实例4 C 语言练习实例5 C 语言练习实例6 C 语言练习实例7 C 语言练习实例8 C 语言练习实例9 ...

  7. ExtJS4 自己主动生成控制grid的列显示、隐藏的checkbox

    因为某种原因.须要做一个控制grid列显示的checkboxgroup,尽管EXTJS4中的gridpanel自带列表能够来控制列的显示隐藏,可是有这种需求(须要一目了然) 以下先上图 waterma ...

  8. 数字精确运算BigDecimal经常用法

    import java.math.BigDecimal;  public class Arith {  /**  * 因为Java的简单类型不可以精确的对浮点数进行运算,这个工具类提供精  * 确的浮 ...

  9. 【Python数据分析】魔术命令(Magic Command)

    IPython有一些特殊的命令(被称为魔术命令),他们有的为常见的任务提供便利,有的则使你能够轻松的控制IPython系统的行为 魔术命令是以百分号%为前缀的命令 常用的IPython魔术命令 命令  ...

  10. UNIX/LINUX使用expect实现人机自己主动交互功能

    expect使用方法 [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来运行.这里的expect事实上和linux下的bash.windows下的cmd是一类 ...