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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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 
目录
打赏
0
0
0
0
82935
分享
相关文章
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
116 79
随着云计算和大数据技术的发展,Hyper-V在虚拟化领域的地位日益凸显
随着云计算和大数据技术的发展,Hyper-V在虚拟化领域的地位日益凸显。作为Windows Server的核心组件,Hyper-V具备卓越的技术性能,支持高可用性、动态迁移等功能,确保虚拟机稳定高效运行。它与Windows深度集成,管理便捷,支持远程管理和自动化部署,降低管理成本。内置防火墙、RBAC等安全功能,提供全方位安全保障。作为内置组件,Hyper-V无需额外购买软件,降低成本。其广泛的生态系统支持和持续增长的市场需求,使其成为企业虚拟化解决方案的首选。
大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW
大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
143 2
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
261 92
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
川航选择引入 SelectDB 建设湖仓一体大数据分析引擎,取得了数据导入效率提升 3-6 倍,查询分析性能提升 10-18 倍、实时性提升至 5 秒内等收益。
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
大数据 优化数据读取
【11月更文挑战第4天】
142 2
数据让农业更聪明——用大数据激活田间地头
数据让农业更聪明——用大数据激活田间地头
14 2
数据的“潘多拉魔盒”:大数据伦理的深度思考
数据的“潘多拉魔盒”:大数据伦理的深度思考
61 25

相关产品

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