资源调度器执行由事件触发
- Yarn的调度器框架是个事件处理器,需要负责处理6种调度器相关的事件类型(Scheduler-EventType)
- NODE_ADDED: 新增计算节点,集群资源总量增加
- NODE_REMOVED: 节点故障或者加黑造成计算节点下线,集群资源总量下降
- NODE_UPDATE: NM心跳汇报,计算节点的资源规格可能动态变化?资源释放由NM确认完成,集群资源总量增加。
- APP_ADDED:
- APP_REMOVED:
- CONTAINER_EXPIRED:
资源模型
- 动态资源注册机制,集群的资源容量由NM汇报
资源调度流程
- 要解决2个问题
- 选择响应哪个租户的哪个资源请求?
- 分配哪个可用资源给这个资源请求?
- 单队列的调度策略
- 根据Application的提交时间FIFO选择应用,然后选择请求
- 本质上是串行的应用整个集群的资源,资源利用率低
- 如果APP持续的资源申请会饿死其它APP,不公平
- 多队列的调度策略
- 调度单位的抽象 队列(Queue)
- 以队列(Queue)作为调度单位
- 通过队列来规划整个集群的容量
- 支持层级的方式组织队列;root队列, leaf队列。其中leaf队列中包含了当前active的Application
- 相比单队列的FIFO调度策略,多队列的调度策略:公平 且保证 弹性
- 流程
- 选择队列(直到leaf queue)
- 选择应用
-
选择请求
- TODO Capacity & Fair Scheduler的流程和实现
- 调度单位的抽象 队列(Queue)
资源抢占模型
- 为了保障集群资源利用率,实现了队列间资源弹性,引入队列最小容量的概念是调度系统设计资源抢占模型的原因。
- 队列有的资源容量有soft、hard limit
-
最小容量capacity 表示可以使用父队列的容量百分比。
- 表示集群各个队列资源使用满载的情况下可以使用的资源容量。
- 当队列资源容量需求低于 最小容量capacity 时,不会预留资源,而是把差值作为弹性资源,共享给需求大于自己最少容量的队列。(队列间资源弹性的能力)
- 当队列有新的资源需求时,没有可用资源,但资源使用又低于 最小容量capacity 。 可能发生资源抢占把共享出去的资源要回来,也可能等待共享资源被主动规划。
-
最大容量maximum 表示可以使用父队列的最大容量百分比。
- 目的是,在具备队列间资源弹性能力的背景下,防止单个队列占用过多资源的情况。
-
最小容量capacity 表示可以使用父队列的容量百分比。
- TODO 资源抢占的流程和实现