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”部分,将状态转储到一个单独的文件中。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Hadoop YARN (Yet Another Resource Negotiator) 是一个基于Hadoop的集群资源管理系统。Hadoop YARN Client是Hadoop YARN中的一部分,它是用来与YARN ResourceManager通信的客户端工具。 Hadoop YARN Client的主要功能是向YARN ResourceManager提交应用程序并获取集群的资源来执行这些应用程序。当一个应用程序需要在Hadoop集群上运行时,开发人员可以使用Hadoop YARN Client来编写和提交应用程序,然后该客户端将应用程序的相关信息发送给YARN ResourceManager。这些应用程序可以是MapReduce程序,也可以是其他类型的应用程序,例如Spark、Flink等。 使用Hadoop YARN Client,开发人员可以指定应用程序所需的计算资源和内存等配置参数。此外,Hadoop YARN Client还可以跟踪应用程序的状态,并显示有关应用程序执行进度和状态的相关信息。如果发生错误或异常,开发人员可以使用Hadoop YARN Client来取消或终止应用程序的执行。 Hadoop YARN Client利用YARN ResourceManager的资源调度功能,将应用程序提交给ResourceManager后,ResourceManager将根据集群的资源情况来分配相应的资源给该应用程序。此外,Hadoop YARN Client还可以与NodeManager通信,以获取有关执行任务的节点的信息,并监视应用程序的进度。 总的来说,Hadoop YARN Client提供了一个方便的方式来提交和管理应用程序的执行,并与YARN ResourceManager和NodeManager进行通信,以获取资源和监视应用程序的状态。通过使用Hadoop YARN Client,开发人员可以更容易地在Hadoop集群上运行和管理各种类型的应用程序。 ### 回答2: Hadoop YARN客户端是Hadoop生态系统中的一个关键组件,用于与YARN资源管理进行通信,并提交、监控和管理MapReduce作业或其他分布式计算任务。YARN(Yet Another Resource Negotiator)是Hadoop的资源管理,负责集群资源的分配和任务的调度Hadoop YARN客户端的主要功能包括作业的提交和监控。当用户想要运行一个MapReduce作业时,他们可以使用YARN客户端来提交该作业。YARN客户端将作业的执行所需要的资源需求和其他相关信息发送给YARN资源管理。资源管理根据集群中可用的资源和调度策略来分配资源,并将作业的任务分配给相应的节点上的容来执行。 同时,YARN客户端还可以监控作业的执行进度和状态。用户可以通过YARN客户端查询和获取作业的相关信息,如已完成的任务数、失败的任务数、运行时间等。这些信息对于实时监控作业的运行状况以及进行作业调优非常有帮助。 此外,YARN客户端还可以用于管理作业的生命周期。用户可以使用YARN客户端来杀死正在运行的作业或取消已提交但未开始执行的作业。这对于当用户不再需要某个作业时或出现意外情况需要中断作业时非常有用。 总之,Hadoop YARN客户端是Hadoop生态系统中负责与YARN资源管理通信的关键组件。它提供了作业的提交、监控和管理的功能,帮助用户实现高效的分布式计算任务。 ### 回答3: Hadoop-YARN-Client是Hadoop生态系统中的一个组件,它是Hadoop资源管理YARN)的客户端库。YARNHadoop的第二代资源管理系统,它的目的是为集群中的各个工作负载提供资源调度和管理服务。 Hadoop-YARN-Client的作用是允许用户通过编程方式与YARN交互,以便向集群提交应用程序,并监控和管理它们的执行。通过Hadoop-YARN-Client,用户可以以编程方式与YARN的应用程序客户端接口(API)进行交互,完成下列任务: 1. 提交应用程序:用户可以使用Hadoop-YARN-Client将一个应用程序提交给YARN。提交应用程序时,需要指定应用程序的类型、优先级、所需资源等信息,并将应用程序的代码和依赖项打包成一个本地或分布式的Jar文件。 2. 监控应用程序:一旦应用程序被提交到YARN,用户可以使用Hadoop-YARN-Client监控应用程序的执行情况。用户可以查询应用程序的状态、进度和资源使用情况等信息。 3. 管理应用程序:用户可以使用Hadoop-YARN-Client管理应用程序的执行。例如,用户可以请求YARN增加或减少分配给应用程序的资源,或者终止应用程序的执行。 总之,Hadoop-YARN-Client是Hadoop生态系统中与YARN交互的关键组件之一。它为用户提供了一种便捷的方式来提交、监控和管理在YARN上执行的应用程序,让用户能够更好地利用集群资源和进行任务调度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值