YARN 调度器框架

资源调度器执行由事件触发

  • Yarn的调度器框架是个事件处理器,需要负责处理6种调度器相关的事件类型(Scheduler-EventType)
    • NODE_ADDED: 新增计算节点,集群资源总量增加
    • NODE_REMOVED: 节点故障或者加黑造成计算节点下线,集群资源总量下降
    • NODE_UPDATE: NM心跳汇报,计算节点的资源规格可能动态变化?资源释放由NM确认完成,集群资源总量增加。
    • APP_ADDED:
    • APP_REMOVED:
    • CONTAINER_EXPIRED:

资源模型

  • 动态资源注册机制,集群的资源容量由NM汇报

资源调度流程

  • 要解决2个问题
    1. 选择响应哪个租户的哪个资源请求?
    2. 分配哪个可用资源给这个资源请求?
  • 单队列的调度策略
    • 根据Application的提交时间FIFO选择应用,然后选择请求
    • 本质上是串行的应用整个集群的资源,资源利用率低
    • 如果APP持续的资源申请会饿死其它APP,不公平
  • 多队列的调度策略
    • 调度单位的抽象 队列(Queue)
      • 以队列(Queue)作为调度单位
      • 通过队列来规划整个集群的容量
      • 支持层级的方式组织队列;root队列, leaf队列。其中leaf队列中包含了当前active的Application
    • 相比单队列的FIFO调度策略,多队列的调度策略:公平 且保证 弹性
    • 流程
      1. 选择队列(直到leaf queue)
      2. 选择应用
      3. 选择请求


        YARN 调度器框架_第1张图片
        image.png

        YARN 调度器框架_第2张图片
        image.png
    • TODO Capacity & Fair Scheduler的流程和实现

资源抢占模型

  • 为了保障集群资源利用率,实现了队列间资源弹性,引入队列最小容量的概念是调度系统设计资源抢占模型的原因。
  • 队列有的资源容量有soft、hard limit
    • 最小容量capacity 表示可以使用父队列的容量百分比。
      • 表示集群各个队列资源使用满载的情况下可以使用的资源容量。
      • 当队列资源容量需求低于 最小容量capacity 时,不会预留资源,而是把差值作为弹性资源,共享给需求大于自己最少容量的队列。(队列间资源弹性的能力)
      • 当队列有新的资源需求时,没有可用资源,但资源使用又低于 最小容量capacity 。 可能发生资源抢占把共享出去的资源要回来,也可能等待共享资源被主动规划。
    • 最大容量maximum 表示可以使用父队列的最大容量百分比。
      • 目的是,在具备队列间资源弹性能力的背景下,防止单个队列占用过多资源的情况。
  • TODO 资源抢占的流程和实现

你可能感兴趣的:(YARN 调度器框架)