前言
在上篇文章中,笔者刚刚阐述过Yarn队列的多优先级调度策略,不同的队列分配不同的优先级等级,这样提交到优先级高的队列上的应用能被优先被处理。但是又一个问题来了,如果我们又想在同一个队列内,对应用的优先级再次进行划分呢?而不是按照纯粹提交时间来进行先后顺序调度。答案是可行的,本文笔者来简单聊聊这个话题,也刚刚好是延续着上一篇的话题内容。
问题描述
一个根本的问题:
如何在一个队列内,支持应用任务间的优先级设置?
如果在不改动任何现有功能的前提下,其实是有变通的办法的:配置多个Yarn队列,分配不同优先级,然后提交对应应用到对应的队列。
但是显然上面提到的方法非常不灵活,而且当应用规模,种类上去之后,这种方式就会越来越凸显出它的弊端。
应用优先级策略的要求
这里我们来看看,针对同个队列内,设置优先级策略,要满足怎样的基本要求呢?
主要要求如下:
- 用户能够对它们的任务设置优先级,并且优先级同样会作用在队列的子队列内。
- 队列现有的用户限制策略,按照提交时间的调度顺序控制应该与优先级策略集成,组合,形成新的应用调度策略。策略的调度方式大体如下:
1)先按照优先级来调度应用,高优先级应用先提交运行,低优先级等待高优先级应用运行结束。这里有一个例外情况,如果用户的应用达到用户资源限制范围(后面会提到),也需要进