免费开通大数据服务:https://www.aliyun.com/product/odps
转载自xingbao各位好,这是介绍阿里云伏羲(fuxi)调度器系列文章的第四篇,今天主要介绍NoedLabel的调度策略
一、FuxiMaster简介
FuxiMaster和Yarn非常相似,定位于分布式系统中资源管理与分配的角色:一个典型的资源分配流程图如下所示:作为调度器,目前FuxiMaster支持的功能主要有:
1、 多租户管理
2、 调度模型及FIFO/FAIR调度策略
3、 针对在线服务保持资源强稳定
4、支持NodeLabel动态划分集群(本文)
5、支持多机房调度
6、支持基于优先级的交互式抢占
7、支持AllOrNothing调度
8、支持基于硬件ID化的调度
9、单Master目前支持2w台机器的规模
10、......
一、NodeLabel的定义
二、NodeLabel调度的实现
1、Label的定义
机器标签用“主键、键值”的组合来描述。假设一台机器的标签为:内核(Kernal)版本是1.9、操作系统(OS)是linux、磁盘(Disk)类型是SATA,那么内核(Kernal)版本、操作系统(OS)、磁盘(Disk)类型就是主键、而1.9、linux、SATA就是每一个主键对应的键值。每一个主键可以对应多个键值,如:内核(Kernal)版本有1.9、2.0、2.1三个值,操作系统(OS)有linux、windows两个值。对于一台机器,每一个主键只能用对应一个键值,即机器的操作系统(OS)不可能即是linux又是windows,, 上述如下图所示:
申请标签资源时,会以“主键、运算符、键值”的组合方式向FuxiMaster申请资源,例如,申请“内核(Kernal)版本大于等于1.9、操作系统(OS)等于windows、磁盘(Disk)类型不等于SSD”的机器资源。这里内核(Kernal)版本、操作系统(OS)、磁盘(Disk)是“主键”,大于等于、等于、不等于是“运算符”,1.9、windows、SSD是键值。我们定义运算符可以有6种取值,分别是:等于、大于、大于等于、小于、小于等于、不等于, 如下图所示:
3、label的管理
为了下文叙述方便,我们将每一个键值用字母代替,如下图所示:
FuxiMaster在接收到机器的label后,会将每一个“主键”的“键值”提取出来,并串联起来作为这个机器的识别码,例如机器1的标签组合是“内核版本为A、操作系统类型是D、磁盘类型是F”,那么这台机器的标签识别码就是ADF。
获取了每台机器的识别码后,我们要建立两个表。第一个表是标签识别码-机器映射表:由于许多台机器可能拥有相同的标签识别码,所以我们需要知道对应每一种标签识别码,究竟对应的是哪些机器,如图所示:
另外一个表是键值-标签识别码映射表:我们需要知道对应每一个单独的键值,究竟有那些标签识别码是包含这个键值的,这在为作业管理器分配资源的时候会发挥作用,如图所示:
4、分配逻辑
通过分析请求中每个主键对应的标签,我们可以得到一组候选的label集合列表,如下图所示:
我们需要找出哪些label组合出现的次数等于请求中主键的个数,这个可以通过堆来实现,如下图所示:
5、物理拓扑
在不同的物理拓扑下,我们会分别建立上述的各种索引表:
6、Label的态度
Label的Attitude是来描述对于label的态度:
1、OPER_HARD_AFFINITY:必须要满足标签的机器,如果资源不满足就进入队列排队;
2、SOFT_HARD_AFFINITY: 尽量要满足标签的机器,如果这些机器未能满足,则也可在其他机器上分配
3、OPER_HARD_UNTI_AFFINITY: 必须不要满足条件的这些机器,如果资源不满足就进入队列排队
4、OPER_SOFT_UNTI_AFFINITY: 尽量不要满足条件的这些机器,其他机器未满足也可以在这些机器上分配
欢迎加入“数加·MaxCompute购买咨询”钉钉群(群号: 11782920)进行咨询,群二维码如下: