Hadoop之核心调度Yarn Part Two

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01 编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有 阅读详情

上一篇讲到Yarn是什么?讲到这,我们知道其有哪些调度方式吗?

YARN之三种调度方式:

下面主要讲CapacityScheduler实现逻辑:

一、应用程序初始化

      应用程序被提交到ResourceManager之后,ResourceManager会向Capacity Scheduler发送一个SchedulerEventType.APP_ADDED事件,Capacity Scheduler收到该事件后,将为应用程序创建一个FiCaSchedulerApp对象跟踪和维护该应用程序的运行时信息,同时将应用程序提交到对应的叶子队列中,叶子队列会对应用程序进行一系列检查,包括以下几个方面:

1. 应用程序所属用户拥有该叶子队列的应用程序提交权限

2. 队列及其父队列当前处于RUNNING状态(递归检查)

3. 队列当前已提交的应用程序数目未达到管理员设定的上限

4. 应用程序所属用户提交的应用程序数目未超过管理员设定的上限

二、资源调度

       当ResourceManager收到来自NodeManager发送的心跳信息后,将向Capacity Scheduler发送一个SchedulerEventType.NODE_UPDATE事件,Capacity Scheduler收到该事件后,会依次进行以下操作:

      

1. 处理心跳信息:NodeManager发送的心跳信息中有两类信息需资源调度器处理,一类是最新启动的Container,另一类是运行完成的Container,具体如下:

         对于最新启动的Container,资源调度器需向ResourceManager发送一个RMContainerEventType.LAUNCHED,进而将该Container从超时监控队列中删除。当资源调度器为ApplicationMaster分配一个Container后,为了防止ApplicationMaster长时间不使用该Container造成资源浪费,它会将该Container加入一个超时监控队列中。如果一段时间内,该队列中的Container仍未被使用,则资源调度器会回收该Container。

         对于运行完成的Container,资源管理器将回收它使用的资源,以便接下来对这些资源进行再分配。

         

         处理完以上两类信息后,Capacity Scheduler将节点上的空闲资源分配给应用程序。

2. 资源分配:

(1). Container主要包含5类信息:

优先级(底层根本:FIFO原则、其他优先级配置)

期望资源所在节点(节点标签管理)

资源量(依据预留、个人、队列等容量设置)

Container数目是否松弛本地性(即是否在没有满足节点本地性资源时,选择机架本地性资源)延迟度

(2). 资源调度器收到资源申请后,会暂时将这些数据请求存放到一个数据结构中,以等待空闲资源出现后为其分配合适的资源。

(3). 当一个节点上有空闲资源时,它会依次选择队列、应用程序和container(请求)使用该资源:

Step1:选择队列

从根队列开始,使用深度优先遍历算法,从根队列开始,依次遍历子队列找出资源使用率最小的子队列。若子队列为叶子队列,则选择该队列,从而进行step2、step3;若子队列为非叶子队列,则以该子队列为根队列重复前面的过程直到找到一个资源使用率最小的叶子队列为止。

注意:上述“队列资源使用率”计算方法为已经使用的资源量除以最小队列资源容量(由管理员配置)。对于非叶子队列,它的已使 用资源量是各个子队列已使用资源量之和。

Step2:选择应用程序

在Step1中选好了叶子队列后,取该队列中最早提交的应用程序(实际排序时用的 Application ID,提交时间越早的应用程序,Application ID 越小)。

Step3:选择 Container

在 Step2中选好应用程序之后,对于同一个应用程序,它请求的Container可能是多样化的,涉及不同的优先级、节点、资源量和数量。当选中一个应用程序后,Capacity Scheduler将尝试优先满足优先级高的Container。对于同一类优先级,优先选择满足本地性的Container,它会依次选择node local、rack local和no local的Container。

(4). 在 Capacity Scheduler 中,在比较资源使用率时,不同的资源比较器对资源定义是不一样的。默认的是 DefaultResourceCalculator,它只考虑Memory资源。另外一种是 DominantResourceCalculator,采用了 DRF 比较算法,同时考虑Memory和 cpu 两种资源。通过参数 yarn.scheduler.capacity.resource-calculator 来设置。

(5). 其他事件处理

APP_REMOVED:在多种情况下Capacity Scheduler将收到该事件,包括应用程序正常结束、应用程序被杀死等。Capacity Scheduler收到该事件后,首先会向所有未运行完成的Container发送一个RMContainerEventType.KILL事件,以释放正在使用的Container;然后才会将应用程序相关数据结构从内存中移除。

NODE_ADDED:当集群中动态加入一个节点时(比如管理员动态扩充集群规模或者节点断开后又复活等),Capacity Scheduler将收到该事件。Capacity Scheduler收到该事件后,只需在相应数据结构中记录NodeManager信息并增加系统总资源量即可。

NODE_REMOVED:当集群中动态移除一个节点时(比如管理员动态移除节点或者节点在一定事件内未汇报心跳而被ResourceManager移除集群),Capacity Scheduler将收到该事件。Capacity Scheduler收到该事件后,除了移除NodeManager信息并减少系统总资源外,还需向所有正运行的Container发送一个RMContainerEventType.KILL事件,以清空相关信息。

CONTAINER_EXPIRED:当Capacity Scheduler将一个Container分配给ApplicationMaster后,ApplicationMaster在一定时间内必须使用该Container,否则ResourceManager将进行强制回收,此时会触发一个CONTAINER_EXPIRED事件。

CS资源分配流程:

Step1:选择队列

从根队列开始,使用深度优先遍历算法,从根队列开始,依次遍历子队列找出资源占用率最小的子队列。若子队列为叶子队列,则选择该队列;若子队列为非叶子队列,则以该子队列为根队列重复前面的过程直到找到一个资源使用率最小的叶子队列为止。

Step2:选择应用

在Step1中选好了叶子队列后,取该队列中最早提交的应用程序(实际排序时用的 Application ID,提交时间越早的应用程序,Application ID 越小)。

Step3:选择 Container

在 Step2中选好应用程序之后,选择该应用程序中优先级最高的 Container。对于优先级相同的 Containers,优选选择满足本地性的 Container,会依次选择 node local、rack local、off switch,在 Capacity Scheduler 中,在比较资源占用率时,不同的资源比较器对资源定义是不一样的。默认的是 DefaultResourceCalculator,它只考虑内存资源。另外一种是 DominantResourceCalculator,采用了 DRF 比较算法,同时考虑内存和 cpu 两种资源。通过参数 yarn.scheduler.capacity.resource-calculator 来设置。为应用申请资源的时候,如果是NODE_LOCAL,顺便也会创建这个节点对应的RACK的RACK_LOCAL的请求和OFF_SWITCH的请求。

YARN请求资源时的locality和relaxility限定:

Resource Name:资源名称(某个节点的ip、某个机架的ip或者是*代表任意),这里叫做名称有些让人难以理解,其实是限制这个ResourceRequest对象资源运行的地点,这里有必要非常具体的讲解YARN的locality。ApplicationMaster客户端在提交应用的时候,有时候会对container运行的位置提出限制,比如,由于某些数据在服务器node1上,因此ApplicationMaster客户端希望用来处理这些数据的container就运行在这个服务器上,这个要求运行在某个特定节点的本地化叫做NODE_LOCAL,也可以,要求运行在某个固定的机架rack1上,这种机架的本地化叫做RACK_LOCAL,或者,也许没有要求(OFF_SWITCH)。因此,Resource Name可以是某个节点的ip(NODE_LOCAL),或者某个机架的ip(RACK_LOCAL),或者是通配符*(OFF_SWITCH)。

上面的一种是没有任何本地化限制的请求,一种是限制为本地机架的请求,一种是限制为本节点内的请求。relaxLocality:是否允许某种本地化限制松弛到更低的要求,比如,当某个ResourceRequest要求其container运行在node1,但是node1的资源剩余量始终无法满足要求,那么需要进行本地化松弛,可以放弃必须运行在服务器node1的要求,改为只要求运行在这个服务器node1所在的机架rack1上就行。返回允许的进行container调度的本地化水平,参数nodeLocalityDelayMs、rackLocalityDelayMs分别代表对NODE_LOCAL和RACK_LOCAL的进行降级前需要延迟的时间阈值。

CS分配资源过程:

CS中配置:

yarn.scheduler.capacity.maximum-am-resource-percent #设置有多少资源可以用来运行app master,即控制当前激活状态的应用:100%

yarn.scheduler.capacity.maximum-applications #设置系统中可以同时运行和等待的应用数量:10000

yarn.scheduler.capacity.root.queues #子对列:default, vc1

yarn.scheduler.capacity.root.default.capacity #它是队列的资源容量占比(百分比)。系统繁忙时,每个队列都应该得到设置的量的资源;当系统空闲时,该队列的资源则可以被其他的队列使用。同一层的所有队列加起来必须是100%。

yarn.scheduler.capacity.root.default.maximum-capacity #队列资源的使用上限。由于系统空闲时,队列可以使用其他的空闲资源,因此最多使用的资源量则是该参数控制。默认是-1,即禁用。

yarn.scheduler.capacity.root.default.user-limit-factor #可以配置为允许单个用户获取更多资源的队列容量的倍数。默认是1,这可以确保无论集群有多空闲,单个用户都不能占用超过队列配置的容量。值被指定为浮点。

每个用户最多使用的队列资源占比

yarn.scheduler.capacity.root.default.minimum-user-limit-percent #如果对资源有需求,每个队列都强制限制在任何给定时间分配给用户的资源百分比。用户限制可以在最小值和最大值之间变化。前者(最小值)设置为该属性值,后者(最大值)取决于已提交应用程序的用户数。例如,假设该属性的值为25。如果两个用户向一个队列提交了应用程序,则任何一个用户都不能使用超过50%的队列资源。如果第三个用户提交了一个应用程序,那么任何一个用户都不能使用超过33%的队列资源。对于4个或更多用户,没有任何用户可以使用超过25%的队列资源。值为100表示不施加用户限制。默认值为100。值被指定为整数。

yarn.scheduler.maximum-allocation-vcores #每个队列对Resource Manager申请的每一个容器分配虚拟计算核的最大限制。

yarn.scheduler.maximum-allocation-gpus #每个队列对Resource Manager申请的每一个容器分配gpu的最大限制。

yarn.resourcemanager.connect.retry-interval.ms #rm失联后重新链接的时间: 1000ms 。

yarn.scheduler.capacity.<queue-path>.user-settings.<user-name>.weight #此浮点值用于计算队列中用户的用户限制资源值。该值将使每个用户的权重大于或小于队列中的其他用户。例如,如果用户A在队列中收到的资源比用户B和C多50%,则用户A的此属性将设置为1.5。用户B和C将默认为1.0。

yarn.scheduler.capacity.<queue-path>.maximum-application-lifetime #提交到队列的应用程序的最长生存时间(秒)。任何小于或等于零的值都将被视为禁用。对于此队列中的所有应用程序,这将是一个困难的时间限制。如果配置了正值,则提交到此队列的任何应用程序都将在超过配置的生存期后终止。用户还可以在应用程序提交上下文中为每个应用程序指定生存期。但是,如果用户生存期超过了队列的最大生存期,那么它将被覆盖。它是时间点配置。注意:配置太低的值将导致更快地终止应用程序。此功能仅适用于叶队列。

yarn.scheduler.capacity.root.<queue-path>.default-application-lifetime #提交到队列的应用程序的默认生存期(秒)。任何小于或等于零的值都将被视为禁用。如果用户未提交生存期值为的应用程序,则将采用此值。它是时间点配置。注意:默认生存期不能超过最大生存期。此功能仅适用于叶队列。

yarn.scheduler.capacity.node-locality-delay:40 #表示调度器在放松节点限制、改为匹配同一机架上的其他节点前尝试错过的调度机会数。通常,应该将其设置为集群中的节点数。默认情况下,在一个机架中设置大约40个节点。应为正整数值。

yarn.scheduler.capacity.resource-calculator #有两种比较器用以比较两个资源的大小(比如比较用户当前使用的资源量是否超过了设置的上限资源量),默认是DefaultResourceCalculator,它只考虑Memory资源。另外一种是DominantResourceCalculator,它采用了DRF比较算法,同时考虑Memory和CPU两种资源。

yarn.scheduler.capacity.<queue-path>.state #队列的状态。可以是正在运行或已停止。如果队列处于已停止状态,则无法将新应用程序提交到其自身或其任何子队列。因此,如果根队列被停止,就不能向整个集群提交任何应用程序。现有的应用程序继续完成,因此可以适当地排出队列。值被指定为枚举。

yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications:限定哪些用户/用户组可向给定队列中提交应用程序。该属性具有继承性,即如果一个用户可以向某个队列提交应用程序,则它可以向它所有子队列中提交应用程序。

yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue #为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。同样,该属性具有继承性,如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。

yarn.scheduler.capacity.root.<queue>.acl_administer_reservations #ACL控制谁可以管理指定的队列的保留资源。如果不指定,则对于这个属性的ACL不会从父队列继承。

yarn.scheduler.capacity.root.<queue>.acl_list_reservations #ACL控制谁可以列出指定队列的保留资源。如果不指定,则对于这个属性的ACL不会从父队列继承。

yarn.scheduler.capacity.root.<queue>.acl_submit_reservations #ACL控制谁可以提交保留资源到指定的队列。如果不指定,则对于这个属性的ACL不会从父队列继承。

yarn.scheduler.capacity.schedule-asynchronously.enable:是否开启异步调度 默认false

yarn.scheduler.capacity.schedule-asynchronously.scheduling-interval-ms:异步调度间隔  --- 5

yarn.scheduler.capacity.schedule-asynchronously.maximum-threads:开启异步调度最大线程数

yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled:是否允许在一个节点管理器心跳中分配多个容器 true

yarn.scheduler.capacity.lazy-preemption-enabled:false 是否开启懒抢占 CapacitySchedulerConfiguration类

yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments:如果启用了多个分配,则一个节点可以分配的最大容器数。默认为-1,不设置限制。

yarn.scheduler.capacity.maximum-am-resource-percent:群集中可用于运行应用程序主控形状的最大资源百分比-控制并发活动应用程序的数量。每个队列的限制与其队列容量和用户限制成正比。默认值为0.1。

yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignments:如果启用了多个分配,控制节点心跳期间允许的OFF_SWITCH分配的数量

yarn.scheduler.capacity.queue-mappings-override.enable:此函数用于指定是否可以覆盖用户指定的队列。默认值为false   mapreduce.job.queuename

yarn.scheduler.capacity.rack-locality-additional-delay:在节点本地延迟时间之外的另外的错过的调度机会的次数,在此之后,CapacityScheduler尝试调度非切换容器而不是机架本地容器.例如:在node-locality-delay = 40和rack-locality-delay = 20的情况下,调度器将在40次错过机会之后尝试机架本地分配,在40 + 20 = 60之后错过机会.使用-1作为默认值,禁用此功能. 在这种情况下,根据资源请求中指定的容器和唯一位置的数量以及集群的大小,计算分配关闭交换容器的错失机会的数量

yarn.scheduler.capacity.root.<leaf-queue-path>.default-application-priority:定义叶队列中的默认应用程序优先级。默认0,最高,逻辑控制

yarn.cluster.max-application-priority:定义集群中最大应用的优先级

yarn.scheduler.capacity.root.<queue_name>.<priority>.acl=user1,user2 #队列的acl用户

具体参考:http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

队列容量=yarn.scheduler.capacity.<queue-path>.capacity/100  --90

队列绝对容量=父队列的 队列绝对容量*队列容量   ---1 * 90%

队列最大容量=yarn.scheduler.capacity.<queue-path>.maximum-capacity/100  ---90%

队列绝对最大容量=父队列的 队列绝对最大容量*队列最大容量    ---90%

绝对资源使用比=使用的资源/全局资源

资源使用比=使用的资源/(全局资源 * 队列绝对容量)

最小分配量=yarn.scheduler.minimum-allocation-mb  ---逻辑控制

用户上限=MAX(yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent,1/队列用户数量)

用户调整因子=yarn.scheduler.capacity.<queue-path>.user-limit-factor,允许单个用户获取更多资源的队列容量的倍数

最大提交应用=yarn.scheduler.capacity.<queue-path>.maximum-applications,如果小于0 设置为(yarn.scheduler.capacity.maximum-applications*队列绝对容量)

单用户最大提交应用=最大提交应用*(用户上限/100)*用户调整因子

AM资源占比(AM可占用队列资源最大的百分比) =yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent,如果为空,设置为yarn.scheduler.capacity.maximum-am-resource-percent

最大活跃应用数量=全局总资源/最小分配量*AM资源占比*队列绝对最大容量

单用户最大活跃应用数量=(全局总资源/最小分配量*AM资源占比*队列绝对容量)*用户上限*用户调整因子

本地延迟分配次数=yarn.scheduler.capacity.node-locality-delay

枚举:

USED_CAP(0), 

ABS_USED_CAP(1), 绝对容量

MAX_CAP(2), 

ABS_MAX_CAP(3),绝对最大容量

CAP(4), 

ABS_CAP(5),

MAX_AM_PERC(6),

RESERVED_CAP(7),预留容量

ABS_RESERVED_CAP(8);绝对预留容量

CS中标签的概念:

什么是Node-label

实际的环境部署中,经常会出现不同的机器类型,比如有些机器是计算型的,有些则是内存型;另一种场景是在大集群中,有时候需要指定有些机器预留给特定的用户用,从而避免其它用户的任务对其造成影响;node label节点标签就是解决这类问题的一种好的方式。运维人员可以根据节点的特性将其分为不同的分区来满足业务多维度的使用需求。Yarn的Node-label功能将很好的试用于异构集群中,可以更好地管理和调度混合类型的应用程序。

Node-label特性

1. 只适用于Capacity Scheduler,不支持Fair Scheduler

2. 一个Node Manager节点只能属于一个label,如果一个资源节点没有配置label,则其属于一个不存在的DEFAULT分区【即没有被设置label的节点】,没有指定队列的作业将会被放置到这些节点上运行,如果所有节点被设置label,没有指定队列的将会停止在accepted节点,后续将因为得不到资源而failed

3. 用户可以为每个队列配置可以访问的分区【label】,默认是只可以访问DEFAULT分区

4. 如果队列配置为对所有label可访问,该队列上的作业可以使用所有label节点上的资源

5. 可以设置每个队列访问特定分区的资源比率

6. node label以及队列和node label的相关配置支持动态更新----即可使用yarn rmadmin –replaceLabelsOnNode 修改节点标签

Reservation概念:

为了解决Queue被一个需要很多资源的Application霸占。我们可以通过Reservation先保留一部分资源,分配给其他的高优先级的容器。这就是它的作用。但是需要注意的是,每台NodeManager只能对应一个Reservation.

yarn.resourcemanager.reservation-system.enable:必须指定的参数。默认值为false。

yarn.resourcemanager.reservation-system.class:可选参数。默认值取决于调度器,如果是容量调度器,则为CapacityReservationSystem。

yarn.resourcemanager.reservation-system.plan.follower:可选参数。基于调度器,CapacitySchedulerPlanFollower,通过动态的创建/调整/销毁队列,将计划状态发布到调度程序。

yarn.resourcemanager.reservation-system.planfollower.time-step:可选参数。默认值为1000ms。PlanFollower计时器的频率ReservationSystem可以被配置到任何队列,包括叶子队列。

yarn.scheduler.capacity.<queue-path>.reservable:必须指定的参数。表明队列的资源对于用户保留来说是可获得的。默认否false

yarn.scheduler.capacity.<queue-path>.reservation-agent:可选参数。将尝试将用户的预订请求放入计划中,默认值为org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.AlignedPlannerwithGreedy。

yarn.scheduler.capacity.<queue-path>.reservation-policy:可选参数。将用于确定sharingpolicy(共享策略)实现的类名,它将验证新保留是否不违反任何不变量。

org.apache.hadoop.yarn.server.resourcemanager.reservation.CapacityOverTimePolicy.

yarn.scheduler.capacity.<queue-path>.reservation-window:可选参数,表示如果满足计划中的约束,sharingpolicy将验证的时间(毫秒)。Long类型值,默认是一天。

yarn.scheduler.capacity.<queue-path>.instantaneous-max-capacity:可选参数,任何时候的最大容量,默认为1,即100%。

yarn.scheduler.capacity.<queue-path>.average-capacity:可选参数。将在ReservationWindow上聚合的平均允许容量,以百分比(%)表示,作为sharingPolicy允许单个用户保留的浮点值。默认100%。

yarn.scheduler.capacity.<queue-path>.reservation-planner:可选参数。计划预留器实现的类,默认:org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.SimpleCapacityReplanner。

yarn.scheduler.capacity.<queue-path>.reservation-enforcement-window:可选参数。表示计划预留者验证预留中约束是否满足的时间(毫秒)默认为1小时。

yarn.scheduler.capacity.resource-calculator:资源计算方法,默认是org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator,它只会计算内存。DominantResourceCalculator则会计算内存和CPU。

CS调度流程:

Capacity调度器说的通俗点,可以理解成一个个的资源队列。这个资源队列是用户自己去分配的。比如我大体上把整个集群分成了AB两个队列,A队列给A项目组的人来使用。B队列给B项目组来使用。但是A项目组下面又有两个方向,那么还可以继续分,比如专门做A1、A2的。

在正常的操作中,Capacity调度器不会强制释放Container,当一个队列资源不够用时,这个队列只能获得其它队列释放后的Container资源。当然,我们可以为队列设置一个最大资源使用量,以免这个队列过多的占用空闲资源,导致其它队列无法使用这些空闲资源,这就是”弹性队列”需要权衡的地方。

Root

    --default 60%

       --a 40%

       --b  60%

    --vc1 40%

       --c

       --d

Queue Elasticity:虽然有了这样的资源分配,但是并不是说default提交了任务,它就只能使用60%的资源,那40%就空闲着。只要资源处于空闲状态,那么default就可以使用100%的资源。但是一旦vc1提交了任务,default就需要在释放资源后,把资源还给vc1队列,直到两者平衡在3:2的比例。

粗粒度上资源是按照上面的方式进行,在每个队列的内部,还是按照FIFO的原则来分配资源的。

Capacity Scheduler资源调度器也采用层级队列组织方式,其ROOT队列可以有多个子队列,而每个子队列又可以有自己的子队列,在队列层级最下面是叶子队列,所有Application皆提交至叶子队列。Capacity Scheduler以队列为单位划分资源,每个队列可设定一定比例的资源最低保证和使用上限。资源调度器总是优先满足最低资源保证,也就是说最低资源保证是每个队列分配资源的依据。

考虑下述极端情况:集群中部分队列提交应用较多,负载较重,设定的最低保证资源不能满足所有Application的请求,导致大部分应用处于pending状态;而与此同时,有部分队列则负责较轻,使用的资源量低于最低资源保证,导致整个集群资源利用率较低。

为了提高资源使用率,合理分配集群资源,YARN引入了资源抢占功能,即资源调度器会将负载较轻的队列的资源暂时分配给负载重的队列(即最低资源保证并不是硬资源保证,当队列不需要太多资源时,并不会满足它的最低资源保证,而是暂时将空闲资源分配给其他需要资源的队列),仅当负载较轻队列突然收到新提交的应用程序时,调度器才进一步将本属于该队列的资源还给它。由于此时资源可能正在被别的队列使用,因此调度器必须等待其他队列释放资源后,才能将这些资源“物归原主”,这通常需要等待一段不确定时间。为了防止等待时间过长,调度器发现等待一段时间后若发现资源并未得到释放,则会强制进行资源回收。

CS特性:

Capacity调度器具有以下的几个特性:

1. 层次化的队列设计,这种层次化的队列设计保证了子队列可以使用父队列设置的全部资源。这样通过层次化的管理,更容易合理分配和限制资源的使用。

2. 容量保证,队列上都会设置一个资源的占比,这样可以保证每个队列都不会占用整个集群的资源。

3. 安全,每个队列有严格的访问控制。只能向自己的队列里面提交任务,而且不能修改或者访问其他队列的任务。

4. 弹性分配,空闲的资源可以被分配给任何队列。当多个队列出现争用的时候,则会按照比例进行平衡。

5. 多租户租用,通过队列的容量限制,多个用户就可以共享同一个集群,同事保证每个队列分配到自己的容量,提高利用率。

6. 操作性,yarn支持动态修改调整容量、权限等的分配,可以在运行时直接修改。还提供给管理员界面,来显示当前的队列状况。管理员可以在运行时,添加一个队列;但是不能删除一个队列。管理员还可以在运行时暂停某个队列,这样可以保证当前的队列在执行过程中,集群不会接收其他的任务。如果一个队列被设置成了stopped,那么就不能向他或者子队列上提交任务了。

7. 基于资源的调度,协调不同资源需求的应用程序,比如内存、CPU、资源(Hdfs数据分区)。

以上是对YARN调度的整理。OVER

 

个人网站:http://www.damon8.cn

 

热文推荐

Springcloud Oauth2 基础篇

Springcloud Oauth2 进阶篇

Springcloud Oauth2 HA篇

浅谈微服务-兼容性
Spring Cloud Kubernetes之实战一配置管理

Spring Cloud Kubernetes之实战二服务注册与发现

Spring Cloud Kubernetes之实战三网关Gateway

微服务自动化部署CI/CD

Ubuntu下K8S部署指南,单机、集群,带你入坑

What is Edge Computing

如有收获,点个在看,谢谢

【信息科学与工程学】计算机科学与自动化——第八十四篇 C++分布式软件高并发/高可用算法01 4. 提交:协调者选择提交时间戳(>所有读时间戳),两阶段提交:a) 写意图预提交到所有参与者,b) 参与者持久化后确认,c) 协调者决定提交,异步清理意图。:客户端请求发送到协调节点,协调节点根据路由转发到主分片所在节点。Span有父子关系。1. 索引文档:客户端发送PUT请求到协调节点,协调节点路由到主分片节点,主分片写入本地,然后并行复制到副本分片,等待确认后响应客户端。3. 搜索:客户端发送搜索请求到协调节点,协调节点广播到所有相关分片,每个分片执行查询,返回结果,协调节点合并、排序、分页后返回。 阅读详情

相关推荐

大专非科班拿下汇丰外包Java岗:我的TEKSystem面试全流程复盘(含IKM笔试真题)

本文详细记录了一位非科班大专生成功通过TEKSystem面试,拿下汇丰银行Java外包岗位的全过程。从IKM全英文笔试到技术面试,作者分享了7个关键转折点的实战经验,包括简历优化、技术考点、英语面试策略及薪酬谈判技巧,特别适合初级Java开发者参考。

weixin_30074763的博客 393

YARN调度器【capacity-scheduler.xml】默认配置

常见调度器 先进先出调度器 容量调度器 公平调度器 多队列 多队列配置 默认配置文件【capacity-scheduler.xml】 先进先出调度器 first-in first-out scheduler IFIO Scheduler 先入队的先出队 先入队的会阻塞后入队的 可以配置: 1、每个用最大占比,防止单个用户把资源占满???? 2、限制哪些用户可以提交应用 容量调度器 相当于 多个 IFIO 默认最大容量 容量最大可以借到多少 公平调度器 容量调度器 多队列

ArYe 1948

4. PCIe 接口时序

在上一篇中,大致介绍IPcore接口。总的来说接口如下图数据的接收和发送通过transmitTLPinterface和ReceiveTLPinterface。收发数据的时序也只是描述这几个接口的关系。从手册上截取PCIex1的接口时序。

jjinl的专栏 6122

Yarn同一NodeManager上是否继续分配container源码逻辑

源码分析 shouldContinueAssigning【是否继续分配】方法解释 以上三个参数在HDP3.1源码中都是默认值 assignMultiple=【yarn.scheduler.fair.assignmultiple=true】 maxAssignDynamic=【yarn.scheduler.fair.dynamic.max.assign=true】 maxAssign=【yarn.scheduler.fair.max.assign=-1】 所以默认值会造成在一个NM中,对于同一个应

gaofeng的博客 883

LVGL仪表盘实战:5分钟用lv_meter打造汽车仪表UI(附完整代码)

本文详细介绍了如何使用LVGL的lv_meter组件在5分钟内构建专业汽车仪表盘UI。从环境配置、刻度定制到指针动画和性能优化,提供完整代码示例和实战技巧,帮助开发者快速实现嵌入式设备上的高效仪表盘设计。

k5l6m的博客 421

如何加快香山处理器Chisel->Verilog编译速度

相比使用默认的scala firrtl complier,使用CIRCT能够将香山代码编译到Verilog的速度提高50%左右。在执行make命令时加上MFC=1,例如make verilog MFC=1或make emu MFC=1。在本地从源码编译CIRCT,在编译完成后将circt/bin路径加入PATH中。使用GraalVM免费版作为JVM编译香山比OpenJDK快10%-20%。我们推荐使用GraalVM代替OpenJDK。使用CIRCT编译香山。

专业技术人员的归宿 862

【yarn】CDP集群 Yarn配置capacity调度器批量分配

最近要升级 集群成 集群,CDH 集群中 Yarn 服务默认使用的是 Fa 调度器,CDP 集群使用的是 调度器,我们之前淌过 调度器因为批量分配设置不合理,导致任务集中分配到了某几台节点,使集群资源负载极度不均衡。为了避免同样的问题出现在 CDP 集群上,我们提前进行调研。看看使用 调度器会不会也有集中分配的现象。但是调研过程中,出现了一些不和预期的现象,等待后续跟进。前面介绍过, 版本后,针对,有如下几个配置,来针对任务类型(小任务)加快分配的优化。通过合理的配置,我们就可以即使用集中分配的方式,又

Mrerlou的博客 1747

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 670

Hadoop: Capacity Scheduler yarn容量调度

本文描述了 CapacityScheduler,这是一种可插拔的 Hadoop 调度器,它允许多租户安全地共享一个大型集群,从而在分配容量的限制下及时为其应用程序分配资源。

主要写大数据集群一线运维和学习工作经验 1722

机器学习实战5-天气预测系列:利用数据集可视化分析数据,并预测某个城市的天气情况

大家好,我是微学AI,最近天气真的是多变啊,忽冷忽热,今天再次给大家带来天气的话题,机器学习实战5-天气预测系列,我们将探讨一个城市的气象数据集,并利用机器学习来预测该城市的天气状况。该数据集包含年平均温度和湿度等信息。

微学AI的博客 1万+

ESP8266-Arduino网络编程实例-异步TCP客户端

本次实例将使用ESPAsyncTCP库实现一个简单的客户端。

视觉与物联智能 1740

yarn的学习之2-容量调度器和预订系统

本文翻译自 http://hadoop.apache.org/docs/r2.8.0/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html 和http://hadoop.apache.org/docs/r2.8.0/hadoop-yarn/hadoop-yarn-site/ReservationSystem.html 1、目的 本文主要描述...

weixin_33767813的博客 345

2023华为OD机试真题B卷 Python 实现【最长的元音子串长度】

定义当一个字符串只有元音字母(a,e,i,o,u,A,E,I,O,U)组成,称为元音字符串,现给定一个字符串,请找出其中最长的元音字符串,并返回其长度,如果找不到请返回0, 字符串中任意一个连续字符组成的子序列称为该字符串的子串

MISAYAONE的博客 900

11111

1.Hadoop是一个由Apache基金会所开发的分布式计算基础框架。2.主要解决海量数据的存储和分析计算问题。3.广义上来讲,Hadoop通常是指一个更广泛的概念--Hadoop生态圈。NameNode:存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所爱的DataNode等。DataNode:在本地文件系统存储文件块数据,以及块数据的校验和。Secondary NameNode:每隔一段时间对NameNode元数据备份。

hh_123456789_hh的博客 581

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

2026年分布式计算系统课堂笔记

TB PB EB结构化数据:固定格式 关系型数据库,excel半结构化数据:具有一定的层次结构,介于结构化数据与非结构化数据之间 json文件,xml文件,电子邮件非结构化数据:无固定格式 文本文件,图片,音乐快速化价值密度低大数据技术要面对的基本问题,也是最核心的问题:就是海量数据如何可靠存储和高效计算。leetcode(1)Hadoop是一个由Apache基金会所开发的分布式计算基础框架。(2)主要解决,海量数据的存储和海量数据的分析计算问题。

Sunny20th的博客 595

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

分布式计算系统1.1

(1)Hadoop是一个由Apache基金会所开发的分布式计算基础框架。(2)主要解决,海量数据的存储和海量数据的分析计算问题。(3)广义上来讲,Hadoop通常是指一个更广泛的概念--Hadoop生态圈。NameNode:存储文件的元数据,如文件命名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所爱的DataNode等。DataNode:在本地文件系统存储文件块数据,以及块数据的校验和。

2401_88003411的博客 320

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

分布式计算系统课堂笔记

(2)多样化(来源多(搜索引擎、社交网络、通话记录、传感器...)、格式多(结构化的数据、非结构化的数据)半结构化数据:具有一定的层次结构,介于结构化数据与非结构化数据之间(json文件、xml文件、电子邮件)TB 太字节 1TB=1024GB 数据库(25张高清图片)B(Byte) 字节 1B=8b 汉字占2个字节。hadoop 分布式计算系统+分布式数据库+Spark。非结构化数据:无固定格式 (文本文件、图片、音乐)(1)大量化(存储量大、增量大)

YESSS__的博客 247

MapReduce单词统计:从Hello World到分布式哲学的深度实践

MapReduce是一种面向大规模数据批处理的编程模型,其核心在于将计算逻辑解耦为Map(映射)与Reduce(归约)两个阶段,并通过Shuffle机制实现键值对的网络分发与聚合。它并非单纯提速工具,而是以确定性、容错性和可扩展性为设计目标的分布式数据处理范式。技术价值体现在对数据分片、并行调度、网络洗牌和故障恢复的抽象封装,广泛应用于日志分析、ETL清洗、搜索引擎索引构建等离线大数据场景。本文聚焦WordCount这一经典案例,深入剖析Text序列化优化、InputFormat边界处理、Combiner使

weixin_29093169的博客 263

linux centos7 hadoop & yarn的调度模式以及参数配置 Yarn的资源调度器默认CapacityScheduler默认只有一个root.default队列 调整Yarn资源队列

复制dev队列属性,并修改为prod队列,修改其capacity为60,maxiu-capacity 为80; 修改default队人列配置为dev队列,并修改其capacity为40,maxium-capacity 为60;Yarn的资源调度器默认使用CapacityScheduler,但是默认只有一个root.default队列。添加dev,prod 队列,删除default队列;第五-七个property。 重启YARN集群;第八-十二个property。

lyl18222的博客 990

Yarn容量调度器并发度问题,解决一直卡在Running job

一、问题描述 Yarn默认调度器为CapacityScheduler(容量调度器),且默认只有一个队列——default。如果队列中执行第一个任务资源不够,就不会再执行第二个任务,一直等到第一个任务执行完毕。 (1)创建一张测试表 create table student(id int, name string); (2)启动1个hive客户端,执行以下插入数据的sql语句 insert into table student values(1,'abc'); 执行该语句,hive会初始化..

For_dongyang的专栏 4386

Hadoop-Yarn-调度器总结

CapacityScheduler旨在允许共享一个大型集群,同时为每个组织提供容量保证。核心思想是Hadoop集群中的可用资源在多个组织之间共享,这些组织根据其计算需求共同为集群提供资金。还有一个额外的好处,即一个组织可以访问其他组织未使用的任何多余容量。这以成本效益高的方式为各组织提供了弹性。跨组织共享集群需要对多租户提供强有力的支持,因为每个组织都必须有保证的容量和安全保护,以确保共享集群不受单个恶意应用程序或用户或其集合的影响。

lu070828的博客 2411

Yarn面试重点

YARN(Yet Another Resource Negotiator)是Hadoop 2.x引入的资源管理器,用于管理Hadoop集群中的资源和作业调度。总体而言,YARN集群的架构是一个分布式资源管理系统,通过ResourceManager和NodeManager协同工作,实现对集群资源的有效管理和作业调度,支持多种类型的应用程序运行在Hadoop集群中。总的来说,FIFO调度器、容量调度器和公平调度器是YARN中常用的三种资源调度模型,每种模型都有其适用的场景和优缺点。

weixin_41767872的博客 1316

hadoop yarn HA集群搭建

可先完成hadoop namenode HA的搭建:http://www.cnblogs.com/kisf/p/7458519.html 搭建yarnde HA只需要在namenode HA配置基础上修改yarn-site.xml。 1. 修改yarn-site.xml (yarn另一台机器上一定要将yarn.resourcemanager.ha.id改成rm1) &l...

anxia5150的博客 324

YARN 高可用(HA)集群搭建(CDH)

详尽的视频讲解,请查看该地址:https://edu.csdn.net/course/detail/9572 HDFS 高可用集群安装完成之后,紧接着快速搞定YARN的集群搭建。 1.修改YARN配置文件 1.1修改yarn-site.xml &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.resourcemanager....

leifeng100200的博客 1553

YARN HA 配置文件设置

Hadoop 2.7.4 + HBase 1.2.6 + ZooKeeper 3.4.10 配置 本文为上述配置的一部分,为方便阅读,故设为独立页面 参考:http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html 1:配置 首先创建local临时目...

weixin_30340745的博客 462
上一篇: Springcloud Oauth2 HA篇
下一篇: Hadoop之核心调度Yarn Part One
交个朋友之猿田地
博客等级 码龄15年 15粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值