YARN global scheduling (全局调度思想解析)

**

YARN全局调度

**
本文将对 https://issues.apache.org/jira/browse/YARN-5139 这个yarn前瞻性功能,全局调度的思想进行深入分析。

首先了解一下全局调度和现有的调度模式有何区别,以及社区为什么要对全局调度进行研究开发工作,相比于现在的调度模式有何优势。

  • 现有的调度模式:
    现有的调度模式是基于NM(NodeManager)的心跳的方式进行调度的(不考虑持续调度模式),进行调度时,一次只考虑一个节点,这很容易造成非最优的调度。举个例子,一个请求要到第100个节点的心跳过来才是他最合适的节点,那么很可能到中间某一次心跳就分给他资源了,不是他最满意的节点。
    其大概逻辑如下
for node in allNodes:
   Go to parentQueue
      Go to leafQueue
        for application in leafQueue.applications:
           for resource-request in application.resource-requests
              try to schedule on node

首先收到NM的心跳,如有空闲Container则进行调度,调度的层次是从父队列到子队列,再到对应的app,最终把应该调度的资源请求在该心跳的节点上进行资源分配。

考虑未来可能的复杂需求:
1.比如申请需要的节点限制:a&&b||c ,必须要在满足a节点 和 b节点的情况下,或者满足c节点进行资源分配。
2.或者有对立的需求,例如HBASE的regionsevers和Storm workers不能分配在同一个节点上。
所以社区考虑把YARN的调度器像全局调度发展。

和现有的调度模式不同,全局调度需要能实现调度的时候,可以对更多的节点进行考虑,找到与应用程序需求最匹配的那些节点。

全局调度的调度逻辑为(提出候选节点的概念,不再是只考虑心跳的节点):

  Go to parentQueue
    Go to leafQueue
      for application in leafQueue.applications:
        for resource-request in application.resource-requests
          for node in nodes (node candidates sorted according to resource-request)
            try to schedule on node

主要committer Wangda Tan 的评论:
Because only application knows which node is best for its pending resource requests, so we can sort and filter node candidates based on application’s resource-requests.(因为只有application 知道哪一个节点最适合pending的资源,所以我们可以根据应用的资源请求来对候选节点进行排序)

发布了14 篇原创文章 · 获赞 4 · 访问量 5685

猜你喜欢

转载自blog.csdn.net/weixin_35792948/article/details/80757073