Hadoop-Yarn-调度器总结

 一、Yarn有哪些调度器

在cdh中Yarn组件中查看配置如下:

可以看到Yarn有三种调度器,分别是FairScheduler、FifoScheduler、CapacityScheduler,它们都是Hadoop的一个可插入调度器。

cdh默认的调度器是FairScheduler,hadoop默认的调度器是CapacityScheduler(<Hadoop-Yarn-启动篇> 中有源码提到过)

此时会感觉FifoScheduler有些孤立,Hadoop官网也只有FairScheduler和CapacityScheduler的调度器说明,说明FifoScheduler调度器并不被推荐使用到生产环境

FifoScheduler是最简单也是最容易理解的调度器,也不需要任何配置,见名知意 first input first output 是一个先进先出队列,在进行资源分配的时候,按照队列中的应用顺序依次分配资源。如果要使用FifoScheduler,在yarn-site.xml文件中修改成如下即可:        

<property>

  <name>yarn.resourcemanager.scheduler.class</name>          <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler</value>

</property>

二、官方对调度器的说明

1、CapacityScheduler

概述

  CapacityScheduler旨在允许共享一个大型集群,同时为每个组织提供容量保证。核心思想是Hadoop集群中的可用资源在多个组织之间共享,这些组织根据其计算需求共同为集群提供资金。还有一个额外的好处,即一个组织可以访问其他组织未使用的任何多余容量。这以成本效益高的方式为各组织提供了弹性。

  跨组织共享集群需要对多租户提供强有力的支持,因为每个组织都必须有保证的容量和安全保护,以确保共享集群不受单个恶意应用程序或用户或其集合的影响。CapacityScheduler提供了一组严格的限制,以确保单个应用程序、用户或队列不会消耗集群中不成比例的资源。此外,CapacityScheduler对来自单个用户和队列的初始化和挂起的应用程序提供了限制,以确保集群的公平性和稳定性。

  CapacityScheduler提供的主要抽象是队列的概念。这些队列通常由管理员设置,以反映共享集群的经济性。

  为了提供对资源共享的进一步控制和可预测性,CapacityScheduler支持分层队列,以确保在允许其他队列使用空闲资源之前,在组织的子队列之间共享资源,从而提供在给定组织的应用程序之间共享空闲资源的亲和力。

特征

CapacityScheduler支持以下功能:

Hierarchical Queues 队列分层

支持队列层次结构,以确保在允许其他队列使用空闲资源之前,在组织的子队列之间共享资源,从而提供更多的控制和可预测性。

Capacity Guarantees 容量保证

队列被分配为网格容量的一小部分,队列自己支配一定容量的资源。提交到队列的所有应用程序都可以访问分配给队列的容量。管理员可以对分配给每个队列的容量配置软限制和可选的硬限制。

Security 安全

每个队列都有严格的ACL,用于控制哪些用户可以向各个队列提交应用程序。此外,还提供了安全保护,以确保用户无法查看和/或修改其他用户的应用程序。

Elasticity 弹性

空闲资源可以分配给超出其容量的任何队列。当在未来某个时间点运行低于容量的队列对这些资源有需求时,随着在这些资源上调度的任务完成,这些资源将分配给运行低于容量队列上的应用程序(也支持抢占)。这确保了资源以可预测和弹性的方式可用于队列,从而防止集群中人为的资源孤岛。

Multi-tenancy 多租户技术

提供了一组全面的限制,以防止单个应用程序、用户和队列独占队列或整个集群的资源,从而确保集群不会不堪重负。

Operability 可操作性
Runtime Configuration 运行时配置

管理员可以在运行时以安全的方式更改队列定义和属性(如容量、ACL),以最大限度地减少对用户的干扰。此外,还为用户和管理员提供了一个控制台,用于查看系统中各种队列的当前资源分配情况。管理员可以在运行时添加其他队列,但除非队列已停止并且没有挂起/正在运行的应用程序,否则无法在运行时删除队列。

Drain applications 排出应用

管理员可以在运行时停止队列,以确保在现有应用程序运行到完成时,不会提交新的应用程序。如果队列处于STOPPED状态,则无法向其自身或其任何子队列提交新的应用程序。现有的应用程序继续完成,因此队列可以正常地排出。管理员还可以启动停止的队列。

Resource-based Scheduling 基于资源的调度

支持资源密集型应用程序,其中应用程序可以选择指定比默认值更高的资源需求,从而适应具有不同资源需求的应用程序。目前,内存是支持的资源需求。

Queue Mapping Interface based on Default or User Defined Placement Rules 基于默认或用户定义的放置规则的队列映射接口

此功能允许用户根据某些默认放置规则将作业映射到特定队列。例如,基于用户和组,或应用程序名称。用户还可以定义自己的放置规则。

Priority Scheduling 优先级调度

此功能允许以不同的优先级提交和安排应用程序。整数值越高表示应用程序的优先级越高。目前,应用程序优先级仅支持FIFO排序策略。

Absolute Resource Configuration 绝对资源配置 

管理员可以为队列指定绝对资源,而不是提供基于百分比的值。这为管理员配置给定队列所需的资源量提供了更好的控制。

Dynamic Auto-Creation and Management of Leaf Queues 叶队列的动态自动创建和管理

此功能支持与队列映射一起自动创建叶队列,队列映射当前支持应用程序放置到队列的基于用户组的队列映射。调度程序还支持基于在父队列上配置的策略对这些队列进行容量管理。

配置

设置ResourceManager使用CapacityScheduler

Hadoop的默认配置,在yarn-site.xml为:

<property>

  <name>yarn.resourcemanager.scheduler.class</name>          <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>

</property>

设置队列

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

CapacityScheduler有一个名为root的预定义队列。系统中的所有队列都是root队列的子队列。

可以通过使用逗号分隔的子队列列表配置yarn.scheduler.ccapacity.roots.queues来设置更多的队列。

CapacityScheduler的配置使用一个称为队列路径的概念来配置队列的层次结构。队列路径是队列层次结构的完整路径,从根开始,使用.(点)作为分隔符。

以下是一个示例,其中包含三个顶级子队列a、b和c以及a和b的一些子队列:

<property>
  <name>yarn.scheduler.capacity.root.queues</name>
  <value>a,b,c</value>
</property>

<property>
  <name>yarn.scheduler.capacity.root.a.queues</name>
  <value>a1,a2</value>
</property>

<property>
  <name>yarn.scheduler.capacity.root.b.queues</name>
  <value>b1,b2,b3</value>
</property>

队列属性
        资源分配

        yarn.scheduler.capacity.<queue-path>.capacity

        yarn.scheduler.capacity.<queue-path>.maximum-capacity

        yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent

        yarn.scheduler.capacity.<queue-path>.user-limit-factor

        yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb

        yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores

        yarn.scheduler.capacity.<queue-path>.user-settings.<user-name>.weight

        使用绝对资源配置的资源分配

        CapacityScheduler支持配置绝对资源,而不是以百分比形式提供队列容量。管理员可以指定一个绝对资源值,如[memory=10240,vcores=12]。这是一个有效的配置,表示10GB内存和12个VCores。

        正在运行和挂起的应用程序限制

        CapacityScheduler支持以下参数来控制正在运行和挂起的应用程序

        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

        yarn.scheduler.capacity.max-parallel-apps / yarn.scheduler.capacity.<queue-path>.max-parallel-apps

        您还可以根据每个用户限制并行应用程序的数量。

        yarn.scheduler.capacity.user.max-parallel-apps

        yarn.scheduler.capacity.user.<username>.max-parallel-apps

        这些限值的评估按以下顺序进行:

        1、最大应用程序检查-如果超过限制,提交将立即被拒绝。

        2、最大并行应用程序检查-接受提交,但应用程序不会转换到RUNNING状态。它将保持在ACCEPTED(接受)状态,直到满足队列/用户限制为止。

        3、最大am资源百分比检查-如果运行的应用程序主机太多,则应用程序将保持在ACCEPTED状态,直到有足够的空间为止。

        队列管理和权限

        CapacityScheduler支持以下参数来管理队列

        yarn.scheduler.capacity.<queue-path>.state

        yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications

        yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue

        注意:ACL的形式为user1,user2 space group1,group2。*的特殊值意味着任何人。空间的特殊价值并不意味着任何人。如果未指定,则根队列的默认值为*。

        基于用户或组、应用程序名称或用户定义的放置规则的队列映射

        CapacityScheduler支持以下参数,以根据用户或组、用户和组或应用程序名称配置队列映射。用户还可以定义自己的放置规则:

        yarn.scheduler.capacity.queue-mappings

        yarn.scheduler.queue-placement-rules.app-name

        yarn.scheduler.capacity.queue-mappings-override.enable

        应用程序的队列生存期

        CapacityScheduler支持以下应用程序寿命参数:

        yarn.scheduler.capacity.<queue-path>.maximum-application-lifetime

        yarn.scheduler.capacity.root.<queue-path>.default-application-lifetime

应用程序优先级的设置

应用程序优先级仅适用于FIFO排序策略。默认订购策略为FIFO

应用程序的默认优先级可以是集群级别和队列级别

        集群级优先级

        任何提交的优先级高于集群最高优先级的应用程序的优先级都将重置为集群最高优先级

        可在yarn-site.xml中配置yarn.cluster.max-application-priority

        叶队列级别优先级

        每个叶队列都由管理员提供默认优先级。队列的默认优先级将用于任何提交的没有指定优先级的应用程序

        可以在$HADOOP_HOME/etc/HADOOP/caccepty-scheduler.xml中配置以下属性

        yarn.scheduler.capacity.root.<leaf-queue-path>.default-application-priority

容器抢占

CapacityScheduler支持从资源使用量超过其保证容量的队列中抢占容器。为了支持应用程序容器的抢占,需要在yarn-site.xml中启用以下配置参数

yarn.resourcemanager.scheduler.monitor.enable

yarn.resourcemanager.scheduler.monitor.policies

CapacityScheduler.xml中以下配置,可以控制提交到队列的应用程序容器的抢占。

yarn.scheduler.capacity.<queue-path>.disable_preemption

yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption

预订属性

CapacityScheduler支持以下参数来控制预订的创建、删除、更新和列出。请注意,任何用户都可以更新、删除或列出自己的预订。

如果已启用但未定义保留ACL,则每个人都可以访问。

相关属性如下:(<queue>是队列名称)

 yarn.scheduler.capacity.root.<queue>.acl_administer_reservations

yarn.scheduler.capacity.root.<queue>.acl_list_reservations

yarn.scheduler.capacity.root.<queue>.acl_submit_reservations

配置ReserveSystem

CapacityScheduler支持预留系统,允许用户提前预留资源。应用程序可以在运行时通过在提交过程中指定reservationId来请求保留的资源。

叶队列的动态自动创建和管理

CapacityScheduler支持在已配置为启用此功能的父队列下自动创建叶队列,并可以为自动创建的队列管理安排编辑策略配置。

其他特性
资源计算器

yarn.scheduler.capacity.resource-calculator

解释:用于比较调度程序中的资源的ResourceCalculator实现。默认值,即org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator 仅使用内存,而显性资源计算器使用显性资源来比较内存、CPU等多维资源。需要Java资源计算器类名。

数据局部性

Capacity Scheduler利用Delay Scheduling来满足任务位置限制。局部约束有三个级别:节点局部、机架局部和关闭开关。

当不能满足局部性时,调度器统计错过的机会的数量,并等待该计数达到阈值,然后将局部性约束放宽到下一级别。可以在以下属性中配置阈值:

yarn.scheduler.capacity.node-locality-delay

解释:CapacityScheduler尝试调度机架本地容器后错过的调度机会数。通常,这应该设置为集群中的节点数。默认情况下,在一个机架中设置大约40个节点。应为正整数值。

yarn.scheduler.capacity.rack-locality-additional-delay

解释:与节点位置延迟相比,额外错过的调度机会的数量,之后CapacityScheduler尝试调度交换机外的容器。默认情况下,此值设置为-1,在这种情况下,分配断开容器的错过机会的数量是基于公式L*C/N计算的,其中

        L是资源请求中指定的位置(节点或机架)的数量

        C是请求的容器的数量

        N是集群的大小

请注意,如果YARN与文件系统分开部署,则应禁用此功能,因为位置性毫无意义。这可以通过将yarn.sscheduler.capacity.node-locality-deplay设置为-1来完成,在这种情况下,将忽略请求的局部性约束。

每个NodeManager心跳的容器分配

CapacityScheduler支持以下参数来控制每个NodeManager心跳中可以分配多少容器。这些参数可通过yarn rmadmin-refreshQueues进行刷新。

yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled

解释:是否允许在一个NodeManager检测信号中分配多个容器。默认为true。

yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments

解释:如果启用了多个分配,则为一个NodeManager检测信号中可以分配的容器的最大数量。默认值为100,将此值设置为-1将禁用此限制。

yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignments

解释:如果启用了多个分配,则为一个NodeManager检测信号中可以分配的最大断开容器数。默认值为1,表示在一个检测信号中只允许一个关闭开关分配。

查看CapacityScheduler的配置

以正常方式启动YARN集群,打开ResourceManager web UI会显示各个队列的资源使用情况

更改队列配置

更改队列/调度程序属性和添加/删除队列可以通过两种方式完成,即文件或API。

可以通过yarn-site.xml中的yarn.scheduler.configuration.store.class进行设置,默认file

解释:用于计划程序配置的配置存储的类型。默认值为“file”,它使用基于文件的capacity-shuler.xml来检索和更改调度器配置。要启用基于API的调度程序配置,请使用“内存”(在内存存储中,在重新启动时没有持久性)、“leveldb”(基于leveldb的存储)或“zk”(基于zookeeper的存储)。只有当使用支持可变配置的调度程序时,基于API的配置才有用。目前只有容量调度程序支持此功能。

文件

要按文件进行编辑,需要编辑conf/capacityscheduler.xml并运行yarn rmadmin-refreshQueues

$ vi $HADOOP_CONF_DIR/capacity-scheduler.xml

$ $HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues

通过文件删除队列

1、停止队列

在删除叶队列之前,叶队列不应具有任何正在运行/挂起的应用程序,并且必须通过更改yarn.scheduler.caccept.<queue-path>.state来停止。在删除父队列之前,其所有子队列不应具有任何正在运行/挂起的应用程序,并且必须停止。父队列也需要停止。

2、删除队列

从文件中删除队列配置并运行刷新

API

此功能处于Alpha阶段,可能会发生更改

补充:

        Alpha :主要是以实现软件功能为主,超多bug

        Beta:消除严重bug,但是还有缺陷,而且会有新功能加入

        RC:(release.candidate):发行候选版,几乎就不会加入新的功能了,而是着重于除错

        Stable版:稳定版

2、FairScheduler

介绍

公平调度是一种将资源分配给应用程序的方法,使所有应用程序在一段时间内平均获得相等的资源份额。

默认情况下,“公平调度程序”仅根据内存进行调度公平性决策。可以使用Ghodsi等人开发的显性资源公平概念,将其配置为同时使用内存和CPU进行调度。

当有一个应用程序运行时,该应用程序将使用整个集群。当提交其他应用程序时,释放的资源会分配给新的应用程序,这样每个应用程序最终都会获得大致相同的资源量。

与默认的Hadoop调度程序不同,它形成了一个应用程序队列,这可以让短应用程序在合理的时间内完成,而不会让长寿命的应用程序挨饿。这也是在多个用户之间共享集群的合理方式。

也可以与应用程序优先级一起使用,优先级被用作权重,以确定每个应用程序应该获得的总资源的比例。

调度器将应用程序进一步组织成“队列”,并在这些队列之间公平地共享资源。默认情况下,所有用户共享一个名为“default”的队列。如果应用程序在容器资源请求中专门列出了一个队列,则该请求会提交到该队列。还可以通过配置根据请求中包含的用户名分配队列。

在每个队列中,调度策略用于在运行的应用程序之间共享资源。默认为基于内存的公平共享,但也可以配置FIFO和具有主导资源公平性的多资源。队列可以按层次结构排列以划分资源,并配置权重以按特定比例共享集群。

除了提供公平共享外,fair Scheduler还允许为队列分配有保证的最小共享,这有助于确保某些用户、组或生产应用程序始终获得足够的资源。

当队列包含应用程序时,它至少会获得其最小共享,但当队列不需要其完全保证的共享时,多余的部分会在其他运行的应用程序之间分配。这使调度程序能够保证队列的容量,同时在队列不包含应用程序时有效地利用资源。

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>

可插入策略的分层队列

公平调度程序支持分层队列。所有队列都是从一个名为“root”的队列派生而来的。可用资源以典型的公平调度方式分布在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 是内置的,可以直接使用。

自动将应用程序放入队列

Fair Scheduler允许管理员配置策略,自动将提交的应用程序放入适当的队列中。放置可能取决于提交者的用户和组以及应用程序传递的请求队列。策略由一组规则组成,这些规则按顺序应用以对传入的应用程序进行分类。每个规则要么将应用程序放入队列,要么拒绝它,要么继续执行下一个规则。

配置

自定义Fair Scheduler通常需要更改两个文件,即yarn-site.xml文件和自定义分配文件

yarn-site.xml

yarn.scheduler.fair.allocation.file    

解释:分配文件的路径。分配文件是描述队列及其属性以及某些策略默认值的XML清单。此文件必须采用下一节中描述的XML格式。如果给定了相对路径,则会在类路径(通常包括Hadoop conf目录)上搜索该文件。默认为fair-scheduler.xml。

yarn.scheduler.fair.user-as-default-queue

解释:如果未指定队列名称,是否使用与分配关联的用户名作为默认队列名称。如果设置为“false”或未设置,则所有作业都有一个名为“default”的共享默认队列。默认为true。如果在分配文件中给定了队列放置策略,则会忽略此属性。

yarn.scheduler.fair.preemption    

解释:是否使用抢占。默认为false。

yarn.scheduler.fair.preemption.cluster-utilization-threshold

解释:抢占开始后的利用率阈值。利用率计算为所有资源中使用率与容量的最大比率。默认值为0.8f。

yarn.scheduler.fair.sizebasedweight

解释:是否根据应用程序的大小为其分配共享,而不是为所有应用程序提供平等的共享(无论大小)。当设置为true时,应用程序的权重为1的自然对数加上应用程序请求的总内存,再除以2的自然对数。默认为false。

yarn.scheduler.fair.assignmultiple

解释:是否允许在一个检测信号中分配多个容器。默认为false。

yarn.scheduler.fair.dynamic.max.assign

解释:如果 assignmultiple 为true,则是否动态确定一个检测信号中可以分配的资源量。启用后,节点上大约一半未分配的资源在一个心跳中分配给容器。默认为true。

yarn.scheduler.fair.max.assign

解释:如果 assignmultiple 为true,dynamic.max.assign 为false,则表示一个检测信号中可以分配的容器的最大数量。默认值为-1,不设限制。

yarn.scheduler.fair.locality.threshold.node    

解释:对于在特定节点上请求容器的应用程序,指自上次容器分配以来,在接受另一个节点上的放置之前等待的调度机会数。表示为0和1之间的浮动,这是集群大小的一小部分,是要错过的调度机会的数量。默认值-1.0表示不要错过任何日程安排机会。

yarn.scheduler.fair.locality.threshold.rack

解释:对于请求在特定机架上放置容器的应用程序,指自上次容器分配以来,在接受另一个机架上的放置之前等待的调度机会的数量。表示为0和1之间的浮动,这是集群大小的一小部分,是要错过的调度机会的数量。默认值-1.0表示不要错过任何日程安排机会。

yarn.scheduler.fair.allow-undeclared-pools

解释:如果是true,则可以在应用程序提交时创建新队列,无论是因为提交者将它们指定为应用程序的队列,还是因为用户将它们作为默认队列属性放置在那里。如果这是false,则任何时候应用程序都会被放置在分配文件中未指定的队列中,而是被放置在“默认”队列中。默认为true。如果在分配文件中给定了队列放置策略,则会忽略此属性。

yarn.scheduler.fair.update-interval-ms

解释:锁定调度程序并重新计算公平份额、重新计算需求以及检查是否有应优先购买的内容的间隔。默认为500毫秒。

yarn.resource-types.memory-mb.increment-allocation

解释:公平调度程序以该值为增量授予内存。如果您提交的任务的资源请求不是memory-mb.increment-allocation的倍数,则该请求将四舍五入到最接近的增量。默认值为1024 MB。

yarn.resource-types.vcores.increment-allocation

解释:fairscheduler以该值为增量授予vcore。如果您提交的任务的资源请求不是vcores.increment-allocation的倍数,则该请求将四舍五入到最接近的增量。默认值为1。

yarn.resource-types.<resource>.increment-allocation

解释:fairscheduler以该值的增量授予<resource>。如果您提交的任务的资源请求不是<resource>.inrement分配的倍数,则该请求将四舍五入到最接近的增量。如果未为资源指定此属性,则不会应用增量四舍五入。如果未指定单位,则假定为资源的默认单位。

yarn.scheduler.increment-allocation-mb

解释:内存的分配增量。不再是首选。请改用yarn.resource-types.memory-mb.increment-allocation。默认值为1024 MB。

yarn.scheduler.increment-allocation-vcores

解释:CPU vcores的分配增量。不再是首选。请改用yarn.resource-types.vcores.crement-allocation。默认值为1。

自定义分配文件

分配文件必须为XML格式。请注意,为了与原始FairScheduler向后兼容,“队列”元素可以改为命名为“池”元素。

队列访问控制列表

队列访问控制列表(ACL)允许管理员控制谁可以对特定队列执行操作。它们使用aclSubmitApps和aclAdministratorApps属性进行配置,这些属性可以按队列设置。目前唯一支持的管理操作是终止应用程序。

管理员也可以向其提交应用程序。这些属性的值的格式类似于“user1,user2 group1,group2” or " group1,group2。(分隔符是一个空格字符

如果用户/组是队列ACL的成员或队列的任何祖先的队列ACL的一员,则允许对该队列执行操作。因此,如果queue2在queue1内,user1在queue1的ACL中,user2在queue2的ACL中时,那么两个用户都可以提交给queue2。)

默认情况下,root 队列的ACL是“*”,因为ACL是向下传递的,这意味着每个人都可以向每个队列提交并终止应用程序。要开始限制访问,请将根队列的ACL更改为“*”以外的内容。

预订访问控制列表

保留访问控制列表(ACL)允许管理员控制谁可以对特定队列执行保留操作。它们配置有aclAdministrativeReservations、aclListReservation和aclSubmitReserves属性,这些属性可以按队列设置。目前支持的管理操作是更新和删除预订。

管理员还可以提交并列出队列中的所有预订。这些属性的值的格式类似于“user1,user2 group1,group2” or " group1,group2"。如果用户/组是保留ACL的成员,则允许对队列执行操作。请注意,任何用户都可以更新、删除或列出自己的预订。如果已启用但未定义保留ACL,则每个人都可以访问。

配置ReserveSystem

Fair Scheduler支持ReservationSystem,该系统允许用户提前预订资源。应用程序可以在运行时通过在提交过程中指定reservationId来请求保留资源。可以在ReserveSystem的yarn-site.xml中配置以下配置参数。

yarn.resourcemanager.reservation-system.enable

解释:必选参数:启用ResourceManager中的ReserveSystem。应为布尔值。默认值为false,即默认情况下未启用ReserveSystem。

yarn.resourcemanager.reservation-system.class

解释:可选参数:ReserveSystem的类名。默认值是根据配置的Scheduler选择的,即如果配置了FairScheduler,则为 FairReserveSystem。

yarn.resourcemanager.reservation-system.plan.follower

解释:可选参数:PlanFollower 的类名,它在计时器上运行,并将FairScheduler与Plan同步,反之亦然。默认值是根据配置的Scheduler选择的,即如果配置了FairScheduler,则它是 FairSchedulerPlanFollower。

yarn.resourcemanager.reservation-system.planfollower.time-step

解释:可选参数:PlanFollower计时器的频率(以毫秒为单位)。应为长值。默认值为1000。

管理

运行时修改配置

通过编辑分配文件,可以在运行时修改最小共享、限制、权重、抢占超时和队列调度策略。调度程序将在看到该文件被修改后10-15秒重新加载该文件。

web UI监控

当前的应用程序、队列和公平共享可以通过ResourceManager的web界面进行检查

队列之间移动应用程序

Fair Scheduler支持将正在运行的应用程序移动到其他队列。这对于将重要的应用程序移动到优先级较高的队列或将不重要的应用软件移动到优先级较低的队列非常有用。可以通过运行yarn application-movetoqueue appID-queue targetQueueName来移动应用程序。

当应用程序移动到队列时,为了确定公平性,它的现有分配将与新队列的分配一起计算,而不是与旧队列的分配。如果将应用程序的资源添加到队列中会违反其maxRunningApps或maxResources约束,则将应用程序移动到队列的尝试将失败。

转储 Fair Scheduler 状态

Fair Scheduler能够定期转储其状态。默认情况下,它处于禁用状态。管理员可以通过将org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.statedump日志记录级别设置为DEBUG来启用它。

Fair Scheduler日志默认情况下会转到Resource Manager日志文件。Fair Scheduler状态转储可能会生成大量日志数据。

取消注释log4j.properties中的“Fair scheduler state dump”部分,将状态转储到一个单独的文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux-目录I/O-004

学习重点&#xff1a; 1.目录I/O的函数接口 2.目录的遍历&#xff0c;目录的递归遍历 1.【mkdir】 1.1函数原型 【int mkdir(const char *pathname, mode_t mode);】1.2函数功能 创建目录文件1.3函数参数 1.3.1【pathname】 文件路径1.3.2【mode】 文件的权限1.4返回值 …

【Java EE初阶二十】关于http(一)

1. 初识http HTTP 最新的版本应该是 HTTP/3.0&#xff0c;目前大规模使用的版本 HTTP/1.1&#xff1b; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同&#xff0c;HTTP 的报文格式&a…

【conda环境 安装 tensorflow2.2】 解决方案

1.检查anaconda安装&#xff1a;在cmd输入 conda --version 2.检测已经安装的环境&#xff1a;conda info --envs 3.新建一个python3.5的环境&#xff0c;tensorflow&#xff1a; ###conda create -n xxx python3.5 xxx为虚拟环境名 ###conda create -n xxx python3.6 xxx为虚拟…

openGauss 5.0.0全密态数据库应用小试

前言 openGauss HCIA教材中&#xff0c;安全是一个重要的章节&#xff0c;在实际项目中&#xff0c;随着网络安全和信息安全形势的变化&#xff0c;企业也越来越重视数据库安全。去年在HALP内部进行openGauss培训时&#xff0c;安全特性就被学员们提出来要重点讲解&#xff0c…

SICTF Round#3 Web方向 题解WP

100&#xff05;_upload 题目描述&#xff1a;小茂夫说&#xff1a;一直上传恶意文件尊嘟要生气了&#xff0c;世事莫固守&#xff0c;转变思路求突破 开题&#xff0c;注意有个文件包含 题目把后缀过滤死了&#xff0c;无法上传php后缀文件。文件内容些许过滤&#xff0c;短…

在ubuntu20.04 上配置 qemu/kvm linux kernel调试环境

一&#xff1a;安装qemu/kvm 和 virsh qemu/kvm 是虚拟机软件&#xff0c;virsh是管理虚拟机的命令行工具&#xff0c;可以使用virsh创建&#xff0c;编辑&#xff0c;启动&#xff0c;停止&#xff0c;删除虚拟机。 &#xff08;1&#xff09;&#xff1a;安装之前&#xff0c…

LLM应用开发与落地:chroma的近似搜索问题

背景 最近开始测试一个游戏客户的RAG模块&#xff0c;发现一个向量数据库中大家容易忽略的一个点&#xff1a;近邻搜索算法。一开始我们选择的是chroma作为向量数据库&#xff0c;因为chroma的用户接口和设计非常简单&#xff0c;而我偏向于简单。创建collection时设置的距离计…

EasySass: could not generate CSS file. See Output panel for details.微信小程序报错及解决

解决微信小程序导入vscode的easysass包报错 问题发现问题来源和解决制作不易&#xff0c;感谢三联&#xff0c;谢谢大家啦 问题发现 当我喜滋滋的在vscode中导入easysass包之后&#xff0c;又在微信小程序中添加vscode扩展&#xff0c;又去文件中改好了配置文件后却直接弹出了…

npm run dev运行出现NODE_OPTIONS=--max_old_space_size=4096 vite --mode dev --host?

问题描述 PS E:\AWorkDataease\DataEase\core\core-frontend> npm run dev dataease0.0.0 dev NODE_OPTIONS–max_old_space_size4096 vite --mode dev --host 0.0.0.0 ‘NODE_OPTIONS’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 解决方案 遇到…

生成对抗网络----GAN

系列文章目录 文章目录 系列文章目录前言一、基本构成二、应用领域三、基本原理四、如何训练GAN 前言 一、基本构成 GAN (Generative Adversarial Network) : 通过两个神经网络&#xff0c;即生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#…

AtCoder Beginner Contest 341 D - Only one of two (Java)

AtCoder Beginner Contest 341 D - Only one of two (Java) 比赛链接&#xff1a;AtCoder Beginner Contest 341 D题传送门AtCoder&#xff1a;D - Only one of two D题传送门洛谷&#xff1a;[ABC341D] Only one of two 题目&#xff1a;[ABC341D】 Only one of two 题目…

安卓游戏开发之图形渲染技术优劣分析

一、引言 随着移动设备的普及和性能的提升&#xff0c;安卓游戏开发已经成为一个热门领域。在安卓游戏开发中&#xff0c;图形渲染技术是关键的一环。本文将对安卓游戏开发中常用的图形渲染技术进行分析&#xff0c;比较它们的优劣&#xff0c;并探讨它们在不同应用场景下的适用…

python+django+vue汽车票在线预订系统58ip7

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 使用说明 使用Navicat或者其它工具&#xff0c;在mysql中创建对应名称的数据库&#xff0c;并导入项目的sql文件&#xff1b; 使用PyChar…

好书推荐丨《细说机器学习:从理论到实践》

文章目录 写在前面机器学习推荐图书内容简介编辑推荐作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本有关机器学习的全新正版书籍&#xff0c;对机器学习、人工智能感兴趣的小伙伴们快来看看吧~ 机器学习 机器学习&#xff08;Machine Learning, ML&…

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径 解法0 迭代法解法1 深度优先 前序解法2 深度优先 前序 添加了StringBulider ---------------&#x1f388;&#x1f388;257. 二叉树的所有路径 题目链接&#x1f388;&#x1f388;------------------- 解法0 迭代法…

08MARL深度强化学习 independent learning

文章目录 前言1、Independent Value-based Learning2、Independent Policy Gradient Methods 前言 记录independent learning算法的基础概念&#xff0c;使用一些RL算法训练多智能体 1、Independent Value-based Learning 基于值的独立学习算法&#xff1a;每个智能体根据自身…

51-2 万字长文,深度解读端到端自动驾驶的挑战和前沿

去年初&#xff0c;我曾打算撰写一篇关于端到端自动驾驶的文章&#xff0c;发现大模型在自动驾驶领域的尝试案例并不多。遂把议题扩散了一点&#xff0c;即从大模型开始&#xff0c;逐渐向自动驾驶垂直领域靠近&#xff0c;最后落地到端到端。这样需要阐述的内容就变成LLM基础模…

【Docker】集群容器监控和统计 Portainer基本用法

Portainer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用川于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 主要功能&#xff1a;实现集群容器的监控和统计 下载安装 官网&#xff1a;https://www.portainer.io 文档&#xff1a;https://do…

Python Selenium实现自动化测试及Chrome驱动使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 Selenium简介 安装Selenium库 编写自动化测试脚本 1 打开浏览器并访问网页 2 查找页面元…

Docker Desktop 链接windos 安装的redis和mysql

1.1.先在容器安装项目 2.链接redis和mysql配置 redis和mysql是在windos安装的&#xff0c;使用的是小p管理器安装的 项目链接 DB_DRIVERmysql DB_HOSThost.docker.internal DB_PORT3306 DB_DATABASEyunxc_test DB_USERNAMEyunxc_test DB_PASSWORDtest123456... DB_CHARSETutf…