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

目的

这份文档描写叙述 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 的格式是这样 user1user2空格group1group2代表不论什么人. 空格代表没有人。假设没有声明。对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%。

原文地址:https://www.cnblogs.com/ldxsuanfa/p/10043763.html