YARN资源调度

资源调度模型

(1)双层资源调度模型

YARN采用双层资源调度模型,第一层,RM中的资源调度器将资源分配给各个AM,第二层,AM将资源分配给内部的任务。

YARN的资源分配是异步的,资源调度器将资源分配给一个应用程序后,不会立刻push到AM,而是放到缓冲区里,等待AM通过周期性的心跳主动来取,即YARN采用了pull-based通信模型。

YARN资源分配过程:
在这里插入图片描述

  • NM通过周期性心跳汇报节点信息
  • RM为NM返回一个心跳ack,包括需要释放的Container列表等信息。
  • RM收到NM的信息后,触发一个NODE_UPDATE事件
  • ResourceScheduler收到NODE_UPDATE事件后,按照一定的策略将该节点上的资源分配给各个应用程序,并将分配结果放到一个内存数据结构中。(由资源调度器决定)
  • AM向RM发送周期性心跳,领取最新分配到的Container
  • RM收到AM心跳后,为它分配的Container将以心跳应答的形式返回给AM
  • AM收到新分配的Container列表后,会将Container进一步分配给各个任务。(由用户应用程序决定)

(2)资源保证机制

分布式计算中,资源调度器需要选择合适的资源保证机制:当应用程序申请的资源无法保证时,是

  • 给应用程序预留一个节点上的资源直到累计释放的空闲资源满足应用程序需求(增量资源分配)
  • 还是暂时放弃当前资源直到出现一个节点剩余资源一次性满足应用程序需求(一次性资源分配)

两种各有优缺点:

  • 增量分配,资源预留将导致资源浪费,降低集群资源利用率
  • 一次性分配:饿死现象,应用程序可能永远等不到一个满足的节点

YARN采用的是增量分配机制,会浪费,但不会饿死。

(3)资源分配算法

主资源公平调度算法DRF
DRF中,将所需资源比例最大的资源称为主资源,设计思想就是将最大最小公平算法应用在主资源上,将多维资源调度问题转化为单资源调度问题,即DRF总是最大化所有主资源中最小的。

资源抢占模型

资源调度器中,每个队列可设置一个最小资源量和最大资源量。最小资源量是资源紧缺的情况下每个队列需要保证的资源量,最大资源量是极端情况下队列也不能超过的资源使用量。资源抢占发生的原因就是由于“最小资源量”这个概念。

为了提高资源使用量,资源调度器会将负载较轻的队列的资源暂时分配给负载较重的队列,仅当负载较轻的队列突然收到新提交的应用程序时,调度器才将本属于该队列的资源分配给它,但由于此时资源可能被其他队列占用,所以调度器需要等待其他队列释放资源后,才能将资源物归原主,这就需要一段不确定的等待时间,为了防止应用程序等待时间过长,调度器等待一段时间后若发现资源没有释放,就会进行资源抢占。

在这里插入图片描述
资源抢占流程:

  • SchedulingEditPolicy检测到需要抢占的资源,将需要抢占的资源通过事件DROP_PESERVATION和PREEMPT_CONTAINER发送给RM
  • RM调用ResourceScheduler的dropContainerReservation和preemptContainer函数,标注待抢占的Container。
  • RM收到来自AM的心跳,通过心跳应答将待释放的资源总量和待抢占Container列表返回。AM收到列表后,可以选择①杀死这些Container②选择并杀死其他Container以凑够数量③不做任务处理,过段事件可能有Container自行释放资源或者由RM杀死Container
  • SchedulingEditPolicy探测到一段时间内,AM没有自行杀死约定的Container,则将这些Container封装到KILL_CONTAINER事件中发送给RM
  • RM调用RsourceScheduler的killContainer函数,而Resource-Scheduler则标注这些待杀死的Container
  • RM收到NM的心跳,通过心跳应答将待杀死的Container列表返回,NM收到后,将这些Container杀死,通过心跳告知RM
  • RM收到来自AM的心跳信息,通过心跳应答将已经杀死的Container列表发送给它

YARN层级队列管理机制

该队列组织方式的特点:

  • 子队列:队列可以嵌套,每个队列有子队列;用户只能将应用程序提交到最底层的队列,即叶子队列。
  • 最少容量:①每个子队列均有一个“最少容量化“属性,表示可以使用父队列的容量的百分比;②调度器总是优先选择当前资源使用率最低的队列,并为之分配资源。比如同级的两个队列Q1和Q2,它们的最少容量为30,而Q1使用了10,Q2使用了12,则调度器会优先将资源分配给Q1③最少容量不是”总会保证的最低容量“,即,如果一个队列的最少容量为20,而该队列中所有队列只用了5,那么剩下的15可以分配给其他需要的队列。④最少容量的值为不小于0的值,但也不能大于”最大容量“。
  • 最大容量:①为了防止一个队列超量使用资源,可以为队列设置一个最大容量,即资源使用上限。②默认情况下队列的最大容量是无限大,即,当一个队列只分配了20%的资源,所有其他队列没有应用程序时,该队列可能使用100%的资源,当其他队列 有应用程序提交时,再逐步归还。

资源调度器

Capacity Scheduler

Yahoo!开发的多用户调度器,以队列为单位划分资源,每个队列可设定一定比例的资源最低保证和使用上限,同时,每个用户也可以设定一定的资源使用上限以防止资源滥用,。当一个队列资源有剩余时,可暂时将剩余资源共享给其他队列。

几个特点:

  • 容量保证:每个队列可设定一定比例的资源最低保证和使用上限,所有提交到该队列的应用程序共享这些资源
  • 灵活性:当一个队列资源有剩余时,可暂时将剩余资源共享给其他队列,一旦该队列有新的应用程序提交,则其他队列释放的资源会归还给该队列。
  • 多重租赁:支持多用户共享集群和多应用程序同时运行。
  • 安全保证:每个队列有严格的ACL列表规定它的访问用户,每个用户可指定哪些用户允许查看自己应用程序的运行状态或者控制应用程序。
  • 动态更新配置文件

Capacity Scheduler实现过程(后面称为CS)

应用程序初始化
应用程序提交到RM后,RM会向CS发送一个SchedulerEventType.APP_ADDED事件,CS收到事件后,为应用程序创建一个FiCaSchedulerApp对象跟踪和维护该应用程序的运行时信息,同时将该应用程序提交到对应的叶子队列中,叶子队列对应用程序进行一系列合法性检查,通过检查后才算提交成功。

资源调度
当RM收到来自NM发送的心跳信息后,将向CS发送一个SchedulerEventType.NODE_UPDATE事件,CS收到后,进行下面操作:

(1) 处理心跳信息:NM发送的心跳中有两类信息需要资源调度器处理:①对于最新启动的Container,调度器向RM发送一个RMContainer-EcentType。LAUNCHED,进而将该Container从超时监控队列中删除,当资源调度器为AM分配一个Container后,为了防止AM长时间不使用该Container造成资源浪费,它会将该Container加入一个超时监控队列中,如果一段时间后该队列中的Container仍未使用,则回收。②对于运行完成的Container,资源调度器回收它使用的资源,便于再分配。
(2)资源分配:
应用程序提交后,AM申请Container,Container包括①优先级②期望资源所在节点③资源量④Container数目⑤是否松弛本地性(即是否在没有满足节点本地性资源时,选择机架本地性资源)
YARN采用三级资源分配策略,当一个节点上有空闲资源时,会依次选择队列、应用程序、container

在这里插入图片描述

  • 选择队列:YARN采用层次结构组织队列,所以队列结构是树形结构,这样资源分配过程实际上就是基于优先级的多叉树遍历的过程。具体:从根队列开始,按照它的子队列资源使用率由小到大遍历各个子队列,如果子队列为叶子队列,则从步骤2和步骤3方法在队列中选择一个Container,否则以该子队列为根队列,重复上面过程。
  • 选择应用程序:选中一个叶子队列后,CS依照提交事件对叶子队列中的应用程序进行排序,依次遍历排序后的应用程序,找到一个或者多个最合适的Container
  • 选择Container:同一个应用程序,它请求的Container可能 是多样化的,涉及不同的优先级、节点、资源量、数量。选中一个应用程序后,CS将尝试优先满足优先级高的Container,对于同一类优先级,优先选择满足本地性的Container,和MRv1一样,会依次选择node local,rack local,no local的Container。

Fair Scheduler(后面称为FS)

Facebook开发的多用户调度器,也是以队列为单位划分资源,每个队列可设定一定比例的资源最低保证和使用上限,同时,每个用户可设定一定的资源使用上限防止资源滥用,当一个队列有资源剩余时,可暂时将剩余资源共享给其他队列。
Fair Scheduler和Capacity Scheduler的区别:

  • 资源公平共享:每个队列中,FS可选择按照FIFO,Fair或者DRF策略为应用程序分配资源。其中,Fair是基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。即,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源,如果三个,就是1/3。
  • 支持资源抢占:当某个队列中有剩余资源时,可共享;而当该队列中有新的应用程序提交时,调度器要回收资源,为了减少不必要的计算浪费,调度器采用先等待再强制回收的策略,即如果等待一段事件后尚有未归还的资源,则会进行资源抢占:从哪些超额使用资源的队列中杀死一部分任务,进而释放资源。
  • 调度策略配置灵活:FS允许每个队列单独设置调度策略。
  • 提高小应用程序响应时间

FS和CS区别

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值