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)
上一篇 2025年9月21日 上午9:01
下一篇 2025年9月21日 上午9:22


相关推荐

  • 如何关闭vscode git工具[通俗易懂]

    如何关闭VScode工具的git提示只需要关闭用户设置里的Git:Enabled即可;第一步,我们只需要打开”文件->首选项->设置”第二步,在搜索栏中搜索git:Enabled,关闭即可;…

    2022年4月10日
    1.4K
  • taglib配置_tablib

    taglib配置_tablibtld文件放入META-INF中取名taglib.tldweb.xml中配置     XXXX   /WEB-INF/lib/包名.jar   

    2025年7月6日
    4
  • ConcurrentHashMap 1.7和1.8区别

    ConcurrentHashMap 1.7和1.8区别ConcurrentHashMap与HashMap和Hashtable最大的不同在于:put和get两次Hash到达指定的HashEntry,第一次hash到达Segment,第二次到达Segment里面的Entry,然后在遍历entry链表(1)从1.7到1.8版本,由于HashEntry从链表变成了红黑树所以concurrentHashMap的时间复杂度从O(n)到O…

    2022年6月24日
    30
  • html中内联元素和块级元素的区别(超级详细)

    html中内联元素和块级元素的区别(超级详细)html 中内联元素和块级元素的区别 1 下表列出了内联元素和块级元素的主要区别 html 中内联元素和块级元素的区别 块级元素 行内元素 独占一行 默认情况下 其宽度自动填满其父元素宽度 相邻的行内元素会排列在同一行里 直到一行排不下 才会换行 其宽度随元素的内容而变化 可以设置 width height 属性 行内元素设置 width height 属性无效 可以设置 m

    2026年3月16日
    2
  • python缩进格式错误的是_python 缩进错误,

    展开全部要求严2113格的代码缩进是python语法的一大特色,就像C语言5261家族(C、C++、Java、C#等等)中的花括4102号一1653样重要,在大多数场合还有必要。在很多代码规范里面也都有要求代码书写按照一定的规则进行换行和代码缩进,但是这些要求只是纯粹是方便人(程序员)来阅读、使用或修改的,对于编译器或者解释器而言,完全是视而不见的。但是对Python解释器而言,每行代码前的缩进都…

    2022年4月12日
    36
  • alluxio架构_alluxio收入

    alluxio架构_alluxio收入Alluxio介绍。

    2025年5月24日
    5

发表回复

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

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