【大数据技术干货】阿里云伏羲(fuxi)调度器FuxiMaster功能简介(二) 调度模型

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 转载自xingbao各位好,这是介绍阿里云伏羲(fuxi)调度器系列文章的第二篇,今天主要介绍调度模型和FIFO\FAIR调度策略 一、FuxiMaster简介 FuxiMaster和Yarn非常相似,定位于分布式系统中资源管理与分配的角色:一个典型的资源分配流程图如下所示: 作为调度器,目前F

免费开通大数据服务:https://www.aliyun.com/product/odps

转载自xingbao

各位好,这是介绍阿里云伏羲(fuxi)调度器系列文章的第二篇,今天主要介绍调度模型和FIFO\FAIR调度策略

一、FuxiMaster简介

FuxiMaster和Yarn非常相似,定位于分布式系统中资源管理与分配的角色:一个典型的资源分配流程图如下所示: 




作为调度器,目前FuxiMaster支持的功能主要有:

1、多租户管理

2、支持FIFO/FAIR调度策略(本文)

3、 针对在线服务保持资源强稳定

4、 支持NodeLabel动态划分集群

5、支持多机房调度

6、支持基于优先级的交互式抢占

7、支持AllOrNothing调度

8、支持基于硬件ID化的调度

9、单Master目前支持2w台机器的规模

10、......

二、基本调度单元与基于拓扑的调度语义.

1、基本调度单元:

在fuxi系统内,基本的调度单元称作ScheduleUnit,它的概念和Yarn的Container是不同的: 举个例子,假设一个MR的作业,规模是1000*1000, 那么在Yarn的调度器中,对应就有100,000个调度单元;而在fuxi系统里,只有2个调度单元(ScheduleUnit), 每一个SchedsuleUnit的SlotNumber是1000。在调度层面上,ScheduleUnit是同一类Slot的集合

2、基本调度语义:

在fuxi系统内,目前线上存在3种基于拓扑的调度语义:LT_MACHINE\LT_ENGINEROOM\LT_CLUSTER, 分别对应着指定机器、指定机房、全集群任选集群;且调度的优先级是LT_MACHINE > LT_ENGINEROOM > LT_CLUSTER; 一个典型的资源申请请求为: SchduleUnit{SlotNum:5, M1 *1, M2 * 1, M3 *1, M4 *1, M5 * 1, C * 5}, 这个ScheduleUnit理解为:总共需要5个slot,优先在M1\M2\M3\M4\M5上分配资源,如果这些机器资源不满足的话,也可以退而其次在其他机器上(LT_CLUSTER)上分配资源

三、主动调度策略:

作业第一次将SchduleUnit发送到调度器时,调度器会遍历ScheduleUnit的拓扑语义在对应机器上进行调度,对应LT_MACHINE的语义,会直接到指定机器上尝试分配资源;如果是LT_ENGINEOOM\LT_CLUSTER的语义,则在一组满足条件的机器列表内进行RoundRobin的分配( roundrobin);

除此之外,还有一些额外的分配限定:

1、ScheduleUnit如果是属于某个QuotaGroup的,那么会首先根据这个QuotaGroup的剩余可用Quota / ScheduleUnit体积 得出一个从Quota层面可以分配的slot数目,与ScheduleUnit的desireNum取一个min;

2、ScheduleUnit可以定义在同一台机器上分配的最大worker数目,主要防止相同类型的worker扎堆在同一台机器上;

3、如果机器处于ScheduleUnit的黑名单中,那么这台机器也不会被分配;黑名单的来源有2种,一种是集群中PE加入的全局黑名单,这个对所有SscheduleUnit都是不可用的;一种的ScheduleUnit自己的黑名单,通常是一台机器多次出现slot运行失败,则作业会通知调度器暂时不调度新的slot到这台机器上;

主动调度策略从全局来说是一种贪心的调度策略,尽量对ScheduleUnit进行调度,如果ScheduleUnit没有被完全满足,则ScheduleUnit携带剩余的DesireNum进入到排队队列,等待被动调度策略触发调度

四、被动调度策略:

被动调度策略顾名思义,是处于waitingQueue中的SchduleUnit被动的被调度器挑选中分配资源;触发被动调度策略的条件有2个:一个是跑完的作业归还资源;一个是机器的资源增加;即当有额外的可用资源时,就会触发被动调度策略,在内部有一个更形象的名字,称为”OnResourceFree“

1、如何挑选waitingQueue

WaitingQueue是基于QuotaGroup的,每一个QuotaGroup都有自己的waitingQueue,同组的ScheduleUnit只会插入到自己组的waitingQueue中;当有一台机器有剩余资源时,我们挑选哪一个QuotaGroup的waitingQueue进行分配呢? 在FuxiMaster中,QuotaGroup有“Hungry”的概念,Hungry的定义是:usdQuota/maxQuota(概念参见 上一篇),此值越低,表明这个QuotaGroup越饥饿,越应该优先得到满足(这里我们也在讨论是否参考runtimeQuota更合理); 根据Hungry对所有QuotaGroup进行排序后,我们就可以得出一个waitingQueue的分配顺序

2、WaitingQueue的构成及遍历

WaitingQueue存放着没有被满足的ScheduleUnit,SchdeduleUnit排列的顺序是根据ScheduleUnit的优先级决定的: 每一个ScheduleUnit都被作业赋予了一个优先级,优先级越高,表明越应该优先分配资源,故在waitingQueue中的位置就越靠前。

在具体分配过程中,对于每一个ScheduleUnit的分配是贪心的,也收到在主动调度策略中的各种限制,一种典型的分配场景如下图所示:




在上图中,如果我们根据优先级依次对ScheduleUnit尝试分配时,发现处于前4个的ScheduleUnit的体积都比机器的可用资源大,那么总共产生80%的无用遍历,当队列中ScheduleUnit比较多时,这个遍历的代价是比较大的,时间复杂度是O(N), 为此,我们采用了如下的算法,期望能够直接找到从资源维度能够分配的ScheduleUnit,同时满足优先级的约定:


首先,我们根据ScheduleUnit的CPU体积构建子队列,每个子队列的ScheduleUnit CPU体积相同,且根据优先级进行排列;同时根据可用资源取出每个候选队列的对头的ScheduleUnit,构建成堆;



当对第一个元素进行分配并POP后,如果堆头ScheduleUnit的体积大于剩余资源,则直接POP;同时尝试将上一个POP出去的ScheduleUnit所属队列的下一个ScheduleUnitPush进堆;


继续:


直到绿线比最低的虚线还要低,表示无法在分配,算法结束



当然,同一条虚线上的ScheduleUnit虽然在CPU维度满足,但是在MEM维度还是可能不满足,所以还是可能会有很多无用遍历,还有优化的空间:



0、红黑树节点保存ScheduleUnit的指针,排序的key是priority

1、每个节点保存自己左、右子树的ScheduleUnit SlotDesc MEM的最小值;

2、先看左子树,如果左子树的ScheduleUnit SlotDesc MEM的最小值比可用资源MEM的值小,表示左子树中有可分的、高优先级的SU,向左子树递归;

3、如果左子树不满足,则看自己满足不满足

4、如果自己不满足,则看右子树的SU SlotDesc MEM的最小值是否比可用资源, MEM的值小,表示左右子树中有可分的、低优先级的SU,向右子树递归;

5、如果都不满足,则此树上所有节点都不再可能被分配资源,以后就不用在遍历此树了


这样做之后,我们就可以以O(logN)的代价找到优先级最高的、CPU、MEM也满足条件的ScheduleUnit,下面一组实验表明了算法的优越性:




在上述实验中,可分的ScheduleUnit只有一个,剩余的ScheduleUnit的体积全部比剩余资源大。可以看到,优化方案比普通遍历方案在性能上提升非常明显

3、FIFO\FAIR调度策略

FIFO\FAIR调度策略的却别体现在WaitingQueue的排序的Key: 如果ScheduleUnit的优先级不同,那么两者都会优先对高优先级的ScheduleUnit进行分配;当优先级相同时,FIFO是根据ScheduleUnit的提交时间进行排序的,提交时间越早,优先级越高; 而FAIR是根据已经分配到的SlotNum进行排序的,已经分配的slotNum越小,优先级越高。这样对FAIR组而言,基本保证了同优先级ScheduleUnits拿到的资源份数基本是相同的


欢迎加入“数加·MaxCompute购买咨询”钉钉群(群号: 11782920)进行咨询,群二维码如下:

96e17df884ab556dc002c912fa736ef6558cbb51 
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
6天前
|
机器学习/深度学习 人工智能 分布式计算
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
77 35
|
23天前
|
存储 人工智能 数据管理
|
16天前
|
存储 人工智能 数据管理
媒体声音|专访阿里云数据库周文超博士:AI就绪的智能数据平台设计思路
在生成式AI的浪潮中,数据的重要性日益凸显。大模型在实际业务场景的落地过程中,必须有海量数据的支撑:经过训练、推理和分析等一系列复杂的数据处理过程,才能最终产生业务价值。事实上,大模型本身就是数据处理后的产物,以数据驱动的决策与创新需要通过更智能的平台解决数据多模处理、实时分析等问题,这正是以阿里云为代表的企业推动 “Data+AI”融合战略的核心动因。
|
22天前
|
机器学习/深度学习 分布式计算 数据挖掘
MaxFrame 性能评测:阿里云MaxCompute上的分布式Pandas引擎
MaxFrame是一款兼容Pandas API的分布式数据分析工具,基于MaxCompute平台,极大提升了大规模数据处理效率。其核心优势在于结合了Pandas的易用性和MaxCompute的分布式计算能力,无需学习新编程模型即可处理海量数据。性能测试显示,在涉及`groupby`和`merge`等复杂操作时,MaxFrame相比本地Pandas有显著性能提升,最高可达9倍。适用于大规模数据分析、数据清洗、预处理及机器学习特征工程等场景。尽管存在网络延迟和资源消耗等问题,MaxFrame仍是处理TB级甚至PB级数据的理想选择。
46 4
|
30天前
|
SQL DataWorks 数据可视化
阿里云DataWorks评测:大数据开发治理平台的卓越表现
阿里云DataWorks是一款集数据集成、开发、分析与管理于一体的大数据平台,支持多种数据源无缝整合,提供可视化ETL工具和灵活的任务调度机制。其内置的安全体系和丰富的插件生态,确保了数据处理的高效性和安全性。通过实际测试,DataWorks展现了强大的计算能力和稳定性,适用于中小企业快速搭建稳定高效的BI系统。未来,DataWorks将继续优化功能,降低使用门槛,并推出更多灵活的定价方案,助力企业实现数据价值最大化。
|
30天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
80 2
|
25天前
|
SQL 存储 分布式计算
阿里云 Paimon + MaxCompute 极速体验
Paimon 和 MaxCompute 的对接经历了长期优化,解决了以往性能不足的问题。通过半年紧密合作,双方团队专门提升了 Paimon 在 MaxCompute 上的读写性能。主要改进包括:采用 Arrow 接口减少数据转换开销,内置 Paimon SDK 提升启动速度,实现原生读写能力,减少中间拷贝与转换,显著降低 CPU 开销与延迟。经过双十一实战验证,Paimon 表的读写速度已接近 MaxCompute 内表,远超传统外表。欢迎体验!
|
2月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
564 7
|
2月前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
70 2
|
14天前
|
分布式计算 Shell MaxCompute
odps测试表及大量数据构建测试
odps测试表及大量数据构建测试

相关产品

  • 云原生大数据计算服务 MaxCompute