Furion Scheduler的混合负载管理

Furion Scheduler的混合负载管理转 http www transwarp cn news detail id 203 多租户场景下实现 Inceptor 中的作业调度是复杂的 不仅要考虑到任务自身的优先级和资源占用情况 而且要结合不同用户 组 角色的权限以及资源配额限制 做细粒度的调度管理 通常会遇到以下几项问题 1 资源被大批处理任务占用 导致小的报表任务一直无法被调度 2 某个用户持续提交任务

多租户场景下实现Inceptor中的作业调度是复杂的,不仅要考虑到任务自身的优先级和资源占用情况,而且要结合不同用户|组|角色的权限以及资源配额限制,做细粒度的调度管理。通常会遇到以下几项问题:

1. 资源被大批处理任务占用,导致小的报表任务一直无法被调度。

2. 某个用户持续提交任务,导致系统资源被过度占用,无法执行其他用户的任务。

3. 以往以Stage为调度粒度的方式不能充分利用空闲CPU资源,需要细化粒度。

为解决以上问题,我们在Inceptor 5.0中优化了原有的资源调度器Inceptor Scheduler,可以解决混合负载下的资源调度问题,提供更好的SLA。

传统Scheduler的调度算法


让我们先回顾一下TDH 4.x系列中Inceptor Scheduler的大致工作流程。当一个SQL的执行计划Action被触发后,SparkContext被创建,接着实例化DAGScheduler,DAGScheduler负责根据RDD依赖链划分Stage任务阶段,随后把Stage以TaskSet的形式提交给TaskScheduler。TaskScheduler负责维护所有TaskSet,并根据设置的调度模式,对各个TaskSet进行调度。TaskScheduler会为每个TaskSet创建一个TaskSetManager对象,用于管理TaskSet的生命周期,以及TaskSet内部Task的调度。该过程中的资源调度以TaskSet或者Task为粒度,会话对其不可见,也就是说它无法在多租户的场景下,根据用户权限和优先级的不同去分配资源,因此限制了作业调度在企业级生产中的灵活性。

新Scheduler的创新一:更精细的调度模式


Inceptor Scheduler共支持三种调度模式:FIFO、FAIR、FURION。这三种模式的区别在于调度逻辑的差别。

FIFO:先进先出是最简单的模式,它根据所有提交的任务按照顺序逐一执行,调度对象是TaskSet。

FAIR:FAIR提供了队列(或资源池)的概念,不同队列具有不同权重。FAIR的调度对象是TaskSet,TaskSet可以提交至不同队列。队列之间的调度采用fair策略,队列内部可以采用fifo或fair策略。

Furion Scheduler的混合负载管理

FURION:FURION是开源Spark所不支持的调度模式。它采用树形结构构建队列关系,调度指标有CPU资源数量和比值、队列权重、运行任务数。每个队列都是树形结构中的一个节点,根据节点中的父子和兄弟关系在调度指标上的关系决定调度顺序。FURION调度对象是Task。

Furion Scheduler的混合负载管理

FURION模式和FAIR模式的对比

1. FURION和FAIR模式在实现方式上存在共性:

首先它们都是完全公平策略的一种实现;

其次都是采用加权的排序调度算法。

2. 不同之处在于:

FURION中的队列关系采用数据结构构建,而FAIR中的队列关系是平行的;

其次FURION是对Task粒度进行调度,而FAIR的调度粒度是Task。

3. 总体上,Furion Scheduler比FAIR Scheduler能提供更好地调度策略,资源管理的粒度,对权重和用户调度策略具有更好的感知能力。

新Scheduler的创新二:图形化的ACL和SLA配置


Inceptor Scheduler的配置可以通过配置文件或者在Guardian上实现。Guardian配置的方法更直观简单,更推荐普通用户使用,因此本文仅介绍Guardian上的配置方式。

成功安装Guardian插件后,打开Guardian界面点击“权限”->“INCEPTOR”,选择待配置的Inceptor服务。

Furion Scheduler的混合负载管理

Inceptor Scheduler在该配置模块中所涉及的配置内容包括“队列权限”和“计算配额”两项。

队列权限

队列权限的设置中,管理员可以对用户|组|角色设置GLOBAL(全局)权限,以及对某一个队列的权限。队列权限分为三种:SUBMIT、ADMIN、ACCESS。

1. SUBMIT:代表用户|组|角色对当前队列是否具有提交作业的权限。

2. ADMIN:代表用户|组|角色是否具有把对队列的任意操作权限赋予其他用户的权限。

3. ACCESS:表示用户|组|角色是否具有访问此Inceptor服务的权限,只能在全局配置中设置。

  • Furion Scheduler的混合负载管理

计算配额

点击计算配额项,进入计算配额管理页面。管理员可以在该界面上设置队列相关参数。

由于FURION涵盖了FAIR和FIFO的调度功能,调度方式更有效,所以目前Guardian上只按照FURION模式提供参数配置。各个队列按照树形结构显示,队列名称右侧提供了队列各项配置属性,其中包括队列的权重、预留CPU核数、预留CPU百分比、最大CPU核数、最大CPU百分比以及调度策略。

Guardian上还提供配置单个队列、单个连接和单个用户可以向Inceptor提交的最大SQL数,可以在“默认配置”和“用户设置”两栏中配置。在“用户设置”栏中点击“添加配额”添加用户计算配额。

Furion Scheduler的混合负载管理

不在用户设置中的用户将采用默认配置。

Furion Scheduler的混合负载管理

Inceptor Scheduler的作用效果演示


下面的视频对以下几个场景,演示了在Inceptor Scheduler的控制下可以达到的作业调度效果:

1. 普通用户之间的任务监控相互隔离,在作业状态监控页面上只能看到自己提交的任务。而Admin可以看到所有任务。

2. 在Guardian上配置队列权限和计算配额,并且及时生效。

3. 优先级高的任务先被执行。

4. 非共享的资源约束-资源预留功能。设置两个队列:etl1权重高但保留资源占比低;etl2权重低但保留资源占比高。然后观察执行速度。

5. 可共享的资源约束-最大资源配额。设置两个队列:etl1权重高但是被限制了最大资源配额;etc2权重低但是没有最大资源配额限制。然后观察执行速度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232700.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 初识Zigbee协议栈及其安装

    初识Zigbee协议栈及其安装1.什么是Zigbee协议栈?什么是ZigBee协议栈呢?它和ZigBee协议有什么关系呢?协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。ZigBee的协议分为两部分,IEEE802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(

    2022年5月8日
    39
  • Spark技术内幕:Executor分配详解

    Spark技术内幕:Executor分配详解当用户应用newSparkContext后,集群就会为在Worker上分配executor,那么这个过程是什么呢?本文以Standalone的Cluster为例,详细的阐述这个过程。

    2025年6月27日
    4
  • 数据库查询常用语句语法

    数据库查询常用语句语法selectxxfrom表格where内容=””检查一个项目是否在列表中可以用in列表,用(‘’,’’,’‘)单引号分隔开名字不在里面namenotin(‘’,‘‘,‘‘)名字在里面namein(‘’,‘‘,‘‘)andorname=’Argentina’orname=’Australia’等同于nameinIN(‘Argentina’,’Australia’)betweenxxandyy…

    2022年4月30日
    39
  • hypervisor kvm_docker vmware

    hypervisor kvm_docker vmwareLinuxhypervisor介绍荣涛2021年10月14日1.引言管理程序对操作系统所做的事情就像操作系统对进程所做的大致相同。它们为执行提供隔离的虚拟硬件平台,从而提供对底层机器的完全访问的错觉。但并非所有的虚拟机管理程序都是一样的,这是一件好事,因为Linux是关于灵活性和选择的。本文首先简要介绍虚拟化和管理程序,然后探讨几个基于Linux的管理程序。2.平台设备模拟平台虚拟化是关于在两个或多个操作系统之间共享一个平台,以便更有效地利用资源。但平台不仅仅意味着处理

    2022年9月22日
    2
  • cms模板「建议收藏」

    cms模板「建议收藏」http://www.zhicheng.com/

    2022年10月9日
    3
  • 括号匹配问题 栈c语言(c语言栈实现括号匹配)

    例如:{}[()]、{[()]}、()[]{}这种大中小括号成对出现(位置不限)则为括号匹配,反之则不匹配,如{()[接下来看一下实现方式栈的定义以及相关操作//栈的定义typedefstruct{ charelem[stack_size]; inttop;}seqStack;//栈的初始化voidinitStack(seqStack*s){ s->top=-…

    2022年4月13日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号