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.mfbz.cn/a/396603.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android内存分析

1.分析某个进程的内存情况 1.1 生成.hprof文件 可以在运行的设备上&#xff0c;使用adb命令生成 .hprof文件&#xff0c;表示在执行命令的那一刻&#xff0c;该进程的内存情况。如下&#xff1a; am dumpheap com.example.demo /data/local/tmp/demo.hprof这里就是对包名为c…

咖啡机缺水保护功能如何实现

在现代生活中&#xff0c;咖啡机已成为许多家庭和办公室不可或缺的设备。然而&#xff0c;咖啡机在使用过程中可能会面临缺水的风险&#xff0c;这不仅会影响到咖啡的制作质量&#xff0c;还可能对机器本身造成损害。为了解决这一问题&#xff0c;一种高效的解决方案是在咖啡机…

数据库:信息存储与管理的关键

数据库&#xff1a;信息存储与管理的关键 数据库是现代信息系统中不可或缺的组成部分&#xff0c;它承担着存储、管理和检索数据的重要任务。本文将详细介绍数据库的定义、分类、作用以及特点。 1. 数据库的介绍 数据库是一个有组织的数据集合&#xff0c;用于存储和管理大量…

RabbitMQ的安装与使用

RabbitMQ的安装与使用 介绍一、RabbitMQ的安装1 查找镜像2 拉取镜像3 查看镜像4 创建容器5 查看容器6 访问测试 二、RabbitMQ的使用1 创建项目2 配置文件3 队列配置文件4 消费者5 生产者6 测试 三、交换器四、普通队列Demo五、死信队列Demo1 介绍2 示例2.1 配置2.2 生产者2.3 消…

初创品牌如何写好宣传文案?媒介盒子分享

初创品牌在起步阶段想要做好宣传&#xff0c;文案是重中之重&#xff0c;然后许多初创品牌在宣传阶段不知道如何写好文案&#xff0c;写文案的时候容易出现模糊不清、定位不明确等问题&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;初创品牌如何写好宣传文案。 一、 文案…

php实现讯飞星火大模型3.5

前期准备 vscode下载安装好 composer下载安装好 php环境安装好 &#xff08;以上可以自行网上查阅资料&#xff09; 开始实现 1.注册讯飞星火用户&#xff0c;获取token使用 讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 2.修改对应php文件中的key等 可以参考…

Gitlab操作流程

阶段1-构建账户信息 1.1 管理员分配账户 方式1-推荐 企业正常使用gitlab时&#xff0c;一般由项目经理(超级管理员)手动创建开发者账户信息&#xff0c;然后将账户发送给开发者&#xff0c;以便登录使用&#xff1b; 流程如下&#xff1a; 点击创建用户按钮&#xff1b; 创…

从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作

NIO基础 1.三大组件 1.1. Channel & Buffer Channel 在Java NIO&#xff08;New I/O&#xff09;中&#xff0c;“Channel”&#xff08;通道&#xff09;是一个重要的概念&#xff0c;用于在非阻塞I/O操作中进行数据的传输。Java NIO提供了一种更为灵活和高效的I/O处理方…

vue 使用Html2Canvas对元素截图 下载

介绍 官网&#xff1a;https://html2canvas.hertzen.com/ 一款轻量化的网页截图工具&#xff0c;可以对元素截图下载&#xff0c;只有几十KB&#xff0c;很强大&#xff0c;例如程序发送错误&#xff0c;就可以调用方法继续截图&#xff0c;或者用户在干什么都可以继续记录。 …

戴尔Dell R740服务器开机冒烟亮黄灯故障维修

今天分享的是一台过保修期的DELL PowerEdge R740服务器开机冒烟的维修案例。先上图&#xff1a; 接到用户报修后工程师立即响应&#xff0c;由于用户也是刚开工第一天服务器开机就出现了这种祥龙吐雾的祥兆&#xff0c;导致工厂业务流程无法正常使用&#xff0c;这台机器在东莞…

TSINGSEE智能分析网关V4的AI算法在消防场景中有哪些应用?

随着科技的不断创新和发展&#xff0c;人工智能已经成为现代社会的重要组成部分。除了在交通、医疗、电力等领域得到了广泛应用外&#xff0c;人工智能在消防领域也有着广泛的应用。AI烟火识别算法作为TSINGSEE青犀视频AI智能分析网关V4的重要组成部分&#xff0c;在城市消防领…

Vuex学习记录

目录 一、Vuex概述 1.1Vuex是什么 1.2使用Vuex统一管理的好处 1.3什么样的数据适合存储在Vuex中 二、Vuex的基本使用 2.1创建Vuex项目 视图式&#xff08;版本&#xff1a;vue3vuex4&#xff09; 命令式&#xff08; 版本&#xff1a;vue2vuex3&#xff09; 可自定义选…

安全架构设计理论与实践

一、考点分布 安全架构概述&#xff08;※※&#xff09;安全模型&#xff08;※※※&#xff09;信息安全整体架构设计网络安全体系架构设计区块链技术&#xff08;※※&#xff09; 二、安全架构概述 被动攻击&#xff1a;收集信息为主&#xff0c;破坏保密性 主动攻击&#…

【数据结构】每天五分钟,快速入门数据结构(一)——数组

目录 一.初始化语法 二.特点 三.数组中的元素默认值 四.时间复杂度 五.Java中的ArrayList类 可变长度数组 1 使用 2 注意事项 3 实现原理 4 ArrayList源码 5 ArrayList方法 一.初始化语法 // 数组动态初始化&#xff08;先定义数组&#xff0c;指定数组长度&#xf…

计算机网络概论和数据通信基础

文章目录 计算机网络概论从物理构成上看&#xff0c;计算机网络包括硬件、软件和协议三大部分计算机网络的功能组成计算机网络的分类网络体系结构分层与体系结构接口、协议和服务数据传送单位OSI模型TCP/IP模型 数据通信基础数字信号调制为模拟信号正交振幅调制QAM 模拟数据编码…

vue框架-vue-cli

vue-cli Vue CLI是一个官方的脚手架工具,用于快速搭建基于Vue.js的项目。Vue CLI提供了一整套可配置的脚手架,可以帮助开发人员快速构建现代化的Web应用程序。 Vue CLI通过提供预先配置好的Webpack模板和插件,使得开发人员可以在不需要手动编写Webpack配置的情况下快速创建…

专145+总420+哈尔滨工业大学803信号与系统和数字逻辑电路考研经验哈工大电子信息与通信,真题,大纲,参考书。

自从高考失利没有考入哈工大&#xff0c;一直带着遗憾&#xff0c;今年初试专业课803信号与系统和数字逻辑电路145&#xff0c;总分420顺利圆满哈工大&#xff0c;了却了一块心病&#xff0c;回看这一年的复习起起落落&#xff0c;心中的那块初心&#xff0c;让我坚持到了上岸&…

Linux中信号机制

信号机制 信号的概念 概念&#xff1a;信号是在软件层次上对中断机制的一种模拟&#xff0c;是一种异步通信方式 所有信号的产生及处理全部都是由内核完成的信号的产生&#xff1a; 1 按键产生 2 系统调用函数产生&#xff08;比如raise&#xff0c; kill&#xff09; 3 硬件…

内存计算研究进展-通用的近数据计算架构

通用的近数据计算架构方面代表性工作有&#xff1a; AMD Research的 TOP-PIM&#xff0c;Carnegie Mellon Univeristy 的 TOM&#xff0c; University of Wisconsin-Madison 的 DRAMA 和 NDA&#xff0c;Seoul National University 的 PEI &#xff0c;IBM Research 的 AMC (ac…

算法-矩阵置零

1、题目来源 73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 2、题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1…
最新文章