Superior Scheduler:带你了解 FusionInsight MRS 的超级调度器
摘要:Superior Scheduler 是一个专门为 Hadoop YARN 分布式资源管理系统设计的调度引擎,是针对企业客户融合资源池,多租户的业务诉求而设计的高性能企业级调度器。
本文分享自华为云社区《FusionInsight MRS的自研超级调度器Superior Scheduler原理简介》,作者:一枚核桃。
Superior Scheduler 是一个专门为 Hadoop YARN 分布式资源管理系统设计的调度引擎,是针对企业客户融合资源池,多租户的业务诉求而设计的高性能企业级调度器。
Superior Scheduler 可实现开源调度器、Fair Scheduler 以及 Capacity Scheduler 的所有功能。另外,相较于开源调度器,Superior Scheduler 在企业级多租户调度策略、租户内多用户资源隔离和共享、调度性能、系统资源利用率和支持大集群扩展性方面都做了针对性的增强。设计的目标是让 Superior Scheduler 直接替代开源调度器。
类似于开源 Fair Scheduler 和 Capacity Scheduler,Superior Scheduler 通过 YARN 调度器插件接口与 YARN Resource Manager 组件进行交互,以提供资源调度功能。下图为其整体系统架构:
Superior Scheduler 的主要模块如下:
Superior Scheduler Engine:具有丰富调度策略的高性能调度器引擎。
Superior YARN Scheduler Plugin:YARN Resource Manager 和 Superior Scheduler Engine 之间的桥梁,负责同 YARN Resource Manager 交互。
在调度原理上,开源的调度器都是基于计算节点心跳驱动的资源反向匹配作业的调度机制。具体来讲,每个计算节点定期发送心跳到 YARN 的 Resource Manager 通知该节点状态并同时启动调度器为这个节点分配作业。这种调度机制把调度的周期同心跳结合在一起,当集群规模增大时,会遇到系统扩展性以及调度性能瓶颈。另外,因为采用了资源反向匹配作业的调度机制,开源调度器在调度精度上也有局限性,例如数据亲和性偏于随机,另外系统也无法支持基于负载的调度策略等。主要原因是调度器在选择作业时,缺乏全局的资源视图,很难做到最优选择。
Superior Scheduler 内部采用了不同的调度机制。Superior Scheduler 的调度器引入了专门的调度线程,把调度同心跳剥离开,避免了系统心跳风暴问题。另外,Superior Scheduler 调度流程采用了从作业到资源的正向匹配方法,这样每个调度的作业都有全局的资源视图,可以很大的提到调度的精度。相比开源调度器,Superior Scheduler 在系统吞吐量、利用率、数据亲和性等方面都有很大提升。
Superior Scheduler 性能对比
Superior Scheduler 除了提高系统吞吐量和利用率,还提供了以下主要调度功能:
多资源池
多资源池有助于在逻辑上划分集群资源并在多个租户/队列之间共享它们。资源池的划分可以基于异构的资源或完全按照应用资源隔离的诉求来划分。对于一个资源池,不同队列可配置进一步的策略。
每个资源池多租户调度(reserve、min、share、max)
Superior Scheduler 提供了灵活的层级多租户调度策略。并允许针对不同的资源池可以访问的租户/队列,配置不同策略,如下所示。
租户资源分配策略示意图如图所示:
同开源的调度器相比,Superior Scheduler 同时提供了租户级百分比和绝对值的混配策略,可以很好的适应各种灵活的企业级租户资源调度诉求。例如,用户可以在一级租户提供最大绝对值的资源保障,这样租户的资源不会因为集群的规模改变而受影响。但在下层的子租户之间,可以提供百分比的分配策略,这样可以尽可能提升一级租户内的资源利用率。
异构和多维资源调度
Superior Scheduler 支持 CPU 和内存资源的调度外,还支持扩展支持以下功能:
节点标签可用于识别像 GPU_ENABLED,SSD_ENBALED 等节点的多维属性,可以根据这些标签进行调度。
资源池可用于对同一类别的资源进行分组并分配给特定的租户/队列。
租户内多用户公平调度
在叶子租户里,多个用户可以使用相同的队列来提交作业。相比开源调度器,Superior Scheduler 可以支持在同一租户内灵活配置不同用户的资源共享策略。例如可以为 VIP 用户配置更多的资源访问权重。
数据位置感知调度
Superior Scheduler 采用“从作业到节点的调度策略”,即尝试在可用节点之间调度给定的作业,使得所选节点适合于给定作业。通过这样做,调度器将具有集群和数据的整体视图。如果有机会使任务更接近数据,则保证了本地化。而开源调度器采用“从节点到作业的调度策略”,在给定节点中尝试匹配适当的作业。
Container 调度时动态资源预留
在异构和多样化的计算环境中,一些 container 需要更多的资源或多种资源,例如 Spark 作业可能需要更大的内存。当这些 container 与其他需要较小资源的 container 竞争时,可能没有机会在合理的时间内获得所需的资源而处于饥饿状态。由于开源的调度器是基于资源反向匹配作业的调度方式,会为这些作业盲目的进行资源预留以防进入饥饿状态。这就导致了系统资源的整体浪费。Superior Scheduler 与开源特性的不同之处在于:
基于需求的匹配:由于 Superior Scheduler 采用“从作业到节点的调度”,能够选择合适的节点来预留资源提升这些特殊 container 的启动时间,并避免浪费。
租户重新平衡:启用预留逻辑时,开源调度器并不遵循配置的共享策略。Superior Scheduler 采取不同的方法。在每个调度周期中,Superior Scheduler 将遍历租户,并尝试基于多租户策略重新达到平衡,且尝试满足所有策略(reserve,min,share 等),以便可以释放预留的资源,将可用资源流向不同租户下的其他本应得到资源的 container。
动态队列状态控制(Open/Closed/Active/Inactive)
支持多个队列状态,有助于管理员操作和维护多个租户。
Open 状态(Open/Closed):如果是 Open(默认)状态,将接受提交到此队列的应用程序,如果是 Closed 状态,则不接受任何应用程序。
Active 状态(Active/Inactive):如果处于 Active(默认)状态,租户内的应用程序是可以被调度和分配资源。如果处于 Inactive 状态则不会进行调度。
应用等待原因
如果应用程序尚未启动,则提供作业等待原因信息。
Superior Scheduler 和 YARN 开源调度器对比分析如下:
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/23b422bdd403336a4fd075ddd】。文章转载请联系作者。
评论