admin管理员组

文章数量:1611905

CapacityScheduler 容量调度器

概述

CapacityScheduler主要抽象的是队列的概念。这些队列通常由管理员设置,以反映共享群集的经济性。中心思想是Hadoop集群中的可用资源在多个组织之间共享,这些组织根据其计算需求共同向集群申请资源。组织还有一个额外的好处,即组织可以访问其他人未使用的任何多余容量。这种成本有效的方式为组织提供了弹性。

特征

  • 分层队列 支持队列分层结构,以确保在允许其他队列使用空闲资源之前在队列的子队列之间共享资源,从而提供更多的控制和可预测性。
  • 容量保证 分配给队列的容量只占网格容量的一小部分,因为有一定的资源容量可供它们支配。所有提交到队列的应用程序都可以访问分配给该队列的容量。管理员可以配置分配给每个队列的容量的软限制和可选的硬限制。
  • 安全性 每个队列都有严格的ACL,用于控制哪些用户可以将应用程序提交到各个队列。此外,还有一些安全措施可确保用户无法查看和/或修改其他用户的应用程序。此外,还支持按队列和系统管理员角色。
  • 弹性 可以将空闲资源分配给超出其容量的任何队列。当低于容量运行的队列对这些资源有需求时,在确保当前队列任务正常完成前提下,它们将被分配给低于容量运行的队列上的应用程序(也支持抢占)。这确保了资源的可预测和弹性,从而防止集群中人工的资源竖井,这有助于利用率。
  • 多租户 提供了全面的限制集,以防止单个应用程序,用户和队列垄断队列或整个群集的资源,以确保群集不被淹没。
  • 可操作性
    运行时配置,管理员可以在运行时以安全的方式更改队列定义和属性(例如容量,ACL),以最大程度地减少对用户的干扰。此外,还为用户和管理员提供了一个控制台,以查看当前资源到系统中各种队列的分配。管理员可以在运行时添加其他队列,但是不能在运行时删除队列。
    清理积压应用程序,管理员可以在运行时停止队列,以确保在现有应用程序运行完毕时,不能提交新的应用程序。如果队列处于STOPPED状态,则无法将新的应用程序提交给它自己或其任何子队列。现有的应用程序继续完成,因此,队列可以排出正常。管理员还可以启动已停止的队列。
  • 基于资源的调度 支持资源密集型应用程序,其中应用程序可以选择指定比默认值更高的资源需求,从而适应具有不同资源需求的应用程序。
  • 基于用户或组的队列映射 此功能允许用户根据用户或组将作业映射到特定队列。

配置

设置ResourceManager以使用CapacityScheduler
要将ResourceManager配置为使用CapacityScheduler,请在conf/yarn-site.xml中设置以下属性:

PropertyValue
yarn.resourcemanager.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

设置队列
CapacityScheduler的配置文件是etc/hadoop/capacity-scheduler.xml。
CapacityScheduler拥有root根队列,其他所有队列都是根队列的子队列。
通过配置yarn.scheduler.capacity.root.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 (a 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 (b is the root queue).
  </ description> 
</ property> 

队列属性

  • 资源分配
Property说明
yarn.scheduler.capacity.<queue-path>.capacity队列容量(以百分比(%)为单位)(例如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,意味着不管群集的空闲程度如何,单个用户永远不会占用超过队列配置的容量。值指定为浮点数。
yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb每个队列在资源管理器上分配给单个容器请求的最大内存限制。此设置将覆盖群集配置yarn.scheduler.maximum-allocation-mb。此值必须小于或等于群集最大值。
yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores每个队列在在资源管理器上分配给单个容器请求的虚拟核心的最大限制。此设置将覆盖群集配置yarn.scheduler.maximum-allocation-vcores。此值必须小于或等于群集最大值。
  • 运行与挂起任务限制
    CapacityScheduler支持以下参数来控制运行、挂起的任务申请:
Property说明
yarn.scheduler.capacity.maximum-applications yarn.scheduler.capacity..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..maximum-am-resource-percent群集中可用于运行应用程序主服务器的最大资源百分比-控制并发活动应用程序的数量。每个队列的限制与它们的队列容量和用户限制成正比。指定为浮点数-即0.5 = 50%。默认值为10%。可以为所有带有yarn.scheduler.capacity.maximum-am-resource-percent的队列设置此值,也可以通过设置yarn.scheduler.capacity.queue-path.maximum-am-resource,在每个队列中被覆盖。
  • 队列权限和管理配置
Property说明
yarn.scheduler.capacity.<queue-path>.state队列的状态。RUNNING或STOPPED。如果队列处于STOPPED状态,则无法将新的应用程序提交给它自己或其任何子队列。因此,如果根队列已停止,则无法将应用程序提交到整个集群。现有的应用程序继续完成,此时,队列可以排出正常。
yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications该ACL谁可以控制哪些提交申请到给定队列。如果给定的用户/组在给定队列或层次结构中的父队列之一上具有必要的ACL,则他们可以提交应用程序。如果没有指定ACL,该属性是从父队列继承。
yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue该ACL谁可以控制哪些管理给定队列的应用程序。如果给定用户/组在给定队列或层次结构中的父队列之一上具有必要的ACL,则他们可以管理应用程序。如果没有指定ACL,该属性是从父队列继承。

tips: 基于用户或组的队列映射;ACL的格式为user1, user2 space group1, group2。*意味着任何人。空间的特殊价值并不意味着任何人。如果没有指定,默认值是*。
CapacityScheduler支持以下参数来配置基于用户或组的队列映射:

Property说明
yarn.scheduler.capacity.queue-mappings此配置指定用户或组到特定队列的映射。可以将单个用户或用户列表映射到队列。用法[u or g]:[name]:[queue_name][,next_mapping]。u或g表示映射是针对用户还是针对组。用户的值为u,组的值为g。name表示用户名或组名。要指定提交了申请的用户,可以使用%user。queue_name指示必须为其映射应用程序的队列名称。要指定与用户名相同的队列名,可以使用%user。要指定与用户所属的主要组名称相同的队列名称,可以使用%primary_group。
yarn.scheduler.capacity.queue-mappings-override.enable此功能用于指定是否可以覆盖用户指定的队列。这是一个布尔值,默认值为false。
例子:
<property>
   <name>yarn.scheduler.capacity.queue-mappings</name>
   <value>u:user1:queue1,g:group1:queue2,u:%user:%user,u:user2:%primary_group</value>
   <description>
     Here, <user1> is mapped to <queue1>, <group1> is mapped to <queue2>, 
     maps users to queues with the same name as user, <user2> is mapped 
     to queue name same as <primary group> respectively. The mappings will be 
     evaluated from left to right, and the first valid mapping will be used.
     user1 映射到queue1;group1映射到queue2;将用户映射到与用户名相同的队列;user2被映射到与user2组名相同的队列中;此关系从左到右依次匹配,取第一个有效映射。
   </description>
 </property>
  • 查看CapacityScheduler的配置
    一旦安装和配置完成,您就可以在从Web-ui启动YARN群集后对其进行检查。
    • 以正常方式启动YARN群集。
    • 打开ResourceManager Web UI。
    • 网页上查看对应队列的资源使用情况。

更改队列配置

更改队列属性和添加新队列非常简单。编辑conf/capacity-scheduler.xml并运行yarn rmadmin -refreshQueues。

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

注意:不能删除队列,仅支持添加新队列并且更新的队列配置应该是有效的,即每个级别的队列容量应等于100%。

本文标签: 容量Hadoopyarn