YARN集群资源调度方法、装置、介质和计算机设备与流程

文档序号:27113554发布日期:2021-10-27 18:56阅读:150来源:国知局
YARN集群资源调度方法、装置、介质和计算机设备与流程
yarn集群资源调度方法、装置、介质和计算机设备
技术领域
1.本公开实施例涉及计算机集群资源管理技术领域,尤其涉及一种yarn集群资源调度方法,yarn集群资源调度装置,以及实现yarn集群资源调度方法的计算机可读存储介质和计算机设备。


背景技术:

2.yarn是一种新的hadoop资源管理系统,它将资源管理从计算框架中分离出来,变成一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。
3.yarn系统通常可由资源管理器rm(resource manager),节点管理器nm(nodemanager),应用管理器am(application master)以及资源容器(container)等组成。在资源调度时,存在一些刚性资源请求,例如科学计算或者是机器学习的训练任务的资源请求,这些作业任务在资源请求时如果申请了例如1000核(core)cpu资源,那么最终必须在规定的时间内把1000核cpu资源全部分配给用户,否则任务就会失败,如分配到500核cpu资源,没有达到作业任务所需的总资源,则作业任务无法启动。
4.相关技术中设计了刚性调度器(gang scheduler)来进行刚性资源请求的处理。但是目前的刚性调度器的实现方式是同步方式,所有应用程序的am与rm是通过心跳定时通信,rm通过锁(lock)的方式保证每个应用程序的多次心跳是串行的,gang scheduler会在每次心跳中同步进行一次资源调度,同步返回调度结果如成功或者失败,此方式资源调度与心跳耦合,造成的问题是无法灵活地对多个应用程序的资源请求进行自定义排队策略,影响调度性能。另外,由于采用同步方式,不支持并发,所以在资源请求量增大时,性能会出现一些瓶颈。


技术实现要素:

5.为了解决上述技术问题或者至少部分地解决上述技术问题,本公开实施例提供了一种yarn集群资源调度方法,yarn集群资源调度装置,以及实现yarn集群资源调度方法的计算机可读存储介质和计算机设备。
6.第一方面,本公开实施例提供了一种yarn集群资源调度方法,应用于资源管理器,该方法包括:
7.接收应用管理器发送的作业任务的作业资源请求;
8.确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中;
9.启动多个第一线程,每个所述第一线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源预分配处理;
10.每个所述第一线程在资源预分配之后,判断每个预分配结果是否满足对应的作业任务的资源需求量;
11.若是,则每个所述第一线程分别提交所述预分配结果至所述应用管理器。
12.在本公开的一些实施例中,所述每个所述第一线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源预分配处理,包括:
13.获取集群所有节点构成节点列表;
14.从所述节点列表中筛选过滤掉符合预设过滤条件的节点,得到待分配节点列表;
15.基于至少一个约束条件对所述待分配节点列表中的每个节点计算节点分值;
16.基于所述节点分值从所述待分配节点列表中确定目标候选节点;
17.在所述目标候选节点上为对应的所述请求单元中的所述多个刚性资源请求进行资源预分配。
18.在本公开的一些实施例中,所述预设过滤条件至少包括节点负载大于预设负载;和/或,所述至少一个约束条件包括节点属性的弱约束条件。
19.在本公开的一些实施例中,所述方法还包括:
20.每个所述第一线程在资源预分配之后,判断预分配结果不满足对应的作业任务的资源需求量时,取消预分配结果以释放所述预分配结果中的资源。
21.在本公开的一些实施例中,所述方法还包括:
22.在预分配结果不满足对应的作业任务的资源需求量时,判断所述作业任务所属的刚性资源请求是否携带指定重试信息;
23.若是,则将所述作业任务所属的刚性资源请求重新添加至所述请求队列中。
24.第二方面,本公开实施例提供一种yarn集群资源调度方法,应用于资源管理器,该方法包括:
25.接收应用管理器发送的作业任务的作业资源请求;
26.确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中;
27.启动多个第二线程,每个所述第二线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源分配处理。
28.在本公开的一些实施例中,所述每个所述第二线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源分配处理,包括:
29.获取集群所有节点构成节点列表;
30.从所述节点列表中筛选过滤掉符合预设过滤条件的节点,得到待分配节点列表;
31.基于至少一个约束条件对所述待分配节点列表中的每个节点计算节点分值;
32.基于每个节点的节点分值为对应的请求单元中的多个刚性资源请求进行资源分配。
33.在本公开的一些实施例中,所述基于每个节点的节点分值为对应的请求单元中的多个刚性资源请求进行资源分配,包括:
34.基于每个节点的节点分值进行节点排序,获取排序后的每个节点的可分配资源;
35.基于排序后的每个节点的可分配资源依次进行资源分配。
36.在本公开的一些实施例中,所述方法还包括:
37.对所述待分配节点列表中的每个节点计算节点分值之前,获取每个节点的可分配
资源的快照信息;
38.基于所述快照信息为每个节点计算节点分值。
39.在本公开的一些实施例中,所述方法还包括:
40.每个所述第二线程在资源分配之后,判断分配结果不满足对应的作业任务的资源需求量时,将所述作业任务所属的刚性资源请求重新添加至所述请求队列中。
41.第三方面,本公开实施例提供一种yarn集群资源调度装置,应用于资源管理器,该装置包括:
42.请求接收模块,用于接收应用管理器发送的作业任务的作业资源请求;
43.队列添加模块,用于确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中;
44.预分配模块,用于启动多个第一线程,每个所述第一线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源预分配处理;
45.分配结果判断模块,用于使每个所述第一线程在资源预分配之后,判断每个预分配结果是否满足对应的作业任务的资源需求量;
46.分配结果提交模块,用于在所述分配结果判断模块的判断结果为是时,使每个所述第一线程分别提交所述预分配结果至所述应用管理器。
47.第四方面,本公开实施例提供一种yarn集群资源调度装置,应用于资源管理器,该装置包括:
48.请求接收模块,用于接收应用管理器发送的作业任务的作业资源请求;
49.队列添加模块,用于确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中;
50.分配模块,用于启动多个第二线程,每个所述第二线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源分配处理。
51.第五方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述yarn集群资源调度方法的步骤。
52.第六方面,本公开实施例提供一种电子设备,包括:
53.处理器;以及
54.存储器,用于存储计算机程序;
55.其中,所述处理器配置为经由执行所述计算机程序来执行上述任一实施例所述yarn集群资源调度方法的步骤。
56.本公开实施例提供的技术方案与现有技术相比具有如下优点:
57.本公开实施例提供的yarn集群资源调度方法、装置、介质和计算机设备中,资源管理器rm接收应用管理器am发送的作业任务的作业资源请求,确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中;启动多个第一线程,每个所述第一线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源预分配处理;每个所述第一线程在资源预分配之后,判断每个预分配结果
是否满足对应的作业任务的资源需求量;若是,则每个所述第一线程分别提交预分配结果至所述am。这样,本实施例的方案可以通过将作业资源请求添加至请求队列,之后再从请求队列中取作业资源请求进行资源调度,如此将am的心跳与资源调度解耦,am心跳发送作业资源请求之后,rm无需立即返回资源调度分配结果,可以异步从请求队列中取作业资源请求进行资源分配,在一定程度上提高调度性能,同时,多线程可以并发从请求队列中对应的请求单元中取对应作业任务的作业资源请求进行资源预分配并提交分配结果,在资源请求量增大时,缓解调度性能出现的瓶颈问题。另外,在多个作业任务并发作业资源请求的情况下,每个作业任务所属的刚性资源请求涉及的节点资源的分配过程可以统一整体分配或者统一回滚,在一定程度上提高了调度性能。
附图说明
58.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
59.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
60.图1为本公开实施例yarn集群系统示意图;
61.图2为本公开实施例yarn集群资源调度方法流程图;
62.图3为本公开实施例yarn集群资源调度方法过程示意图;
63.图4为本公开另一实施例yarn集群资源调度方法流程图;
64.图5为本公开又一实施例yarn集群资源调度方法流程图;
65.图6为本公开再一实施例yarn集群资源调度方法流程图;
66.图7为本公开实施例yarn集群资源调度装置示意图;
67.图8为本公开另一实施例yarn集群资源调度装置示意图;
68.图9为本公开实施例实现yarn集群资源调度方法的计算机设备示意图。
具体实施方式
69.为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
70.在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
71.应当理解,在下文中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可
以是多个。
72.图1为yarn集群系统示意图,图2为本公开实施例提供的一种yarn集群资源调度方法,该方法可以基于图1所示集群系统实施,具体可以应用于资源管理器rm。该方法可以包括以下步骤:
73.步骤s201:接收应用管理器发送的作业任务的作业资源请求。
74.示例性的,作业资源请求可以携带相应作业任务所需资源类型和数量等信息,资源类型可以是如cpu、内存等不同类型的资源。同一作业任务可能陆续有多个作业资源请求。具体的,am可以基于心跳将客户端(client)提交的应用程序的作业任务的作业资源请求发送至rm。
75.步骤s202:确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中。
76.示例性的,作业资源请求可以是弹性资源请求,也可以是刚性资源请求,刚性资源请求如请求1000核cpu,则rm必须成功分配足额的1000核cpu资源才返回分配结果到am,否则直接失败。
77.本实施例中rm可以调用预先配置的刚性调度器(gang scheduler)来进行刚性资源请求的处理。现有的各调度器均可以通过可插拔方式配置于rm中,这些可以参考现有技术理解,此处不再赘述。
78.rm判断接收的作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列(requestqueue)中,am的心跳立即返回,不进行锁(block)操作。之后由gang scheduler从request queue里异步取刚性资源请求处理来分配资源。即本实施例中gang scheduler处于异步场景下,此时,为了适应性的记录属于同一作业任务的多个刚性资源请求的情况,在异步场景中,参考图3中所示,本实施例中封装成请求单元(request cell),属于同一作业任务的多个刚性资源请求被添加至请求队列(request queue)中的一个请求单元(request cell)中,不同的作业任务对应不同的请求单元(request cell)。如作业任务1对应request cell1,作业任务2对应request cell2,依次类推,作业任务n对应request celln等等,每个request cell的唯一标识id可以是对应的作业任务的唯一标识id,属于一个作业任务的所有作业资源请求中均可携带该作业任务的唯一标识id,如此可以区分并将不同作业任务所属的多个刚性资源请求添加至各自对应的不同请求单元中。
79.步骤s203:启动多个第一线程,每个所述第一线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源预分配处理。
80.示例性的,每个第一线程可以认为是一个事务,每个第一线程可以集中处理请求队列(request queue)中对应的一个请求单元(request cell)中的多个刚性资源请求,如线程1对应request cell1,线程2对应request cell2,线程n对应request celln。具体的,gang scheduler可以启动多个第一线程即开启事务,每个第一线程从请求队列中获取对应的请求单元中的多个刚性资源请求以进行资源预分配处理。这里不进行真实资源分配,只是资源预分配,可以理解为事务未提交。
81.步骤s204:每个所述第一线程在资源预分配之后,判断每个预分配结果是否满足对应的作业任务的资源需求量。
82.示例性的,每个第一线程各自在资源预分配之后,判断各自的预分配结果是否满足对应的作业任务的资源需求量,例如线程1处理请求单元request cell1中的作业资源请求,得到预分配结果1,然后判断预分配结果1是否满足对应的作业任务1的资源需求量,该资源需求量可以基于属于作业任务1的多个刚性资源请求各自携带的资源需求量求和计算得到。
83.步骤s205:若是,则每个所述第一线程分别提交所述预分配结果至所述am。
84.具体的,每个第一线程判断各自的预分配结果满足对应的作业任务的资源需求量时,则分别提交各自的预分配结果至所述am,此处可以理解为进行了最终的实际分配,事务提交。
85.本实施例中,gang scheduler的资源分配基于请求单元request cell整体做调度,预分配结果至少可以包含一组资源容器(container)列表。
86.本实施例的yarn集群资源调度方法,可以通过将作业资源请求添加至请求队列,之后再从请求队列中取作业资源请求进行资源调度,如此将am的心跳与资源调度解耦,am心跳发送作业资源请求之后,rm无需立即返回资源调度分配结果,可以异步从请求队列中取作业资源请求进行资源分配,在一定程度上提高调度性能,同时,多线程可以并发从请求队列中对应的请求单元中取对应作业任务的作业资源请求进行资源预分配并提交分配结果,在资源请求量增大时,可以缓解调度性能出现的瓶颈问题。另外,在多个作业任务并发作业资源请求的情况下,每个作业任务所属的刚性资源请求涉及的多个节点资源的分配过程可以统一整体分配或者统一回滚,在一定程度上提高了调度性能。
87.可选的,在本公开的一些实施例中,结合图4中所示,步骤s203中每个所述第一线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源预分配处理,具体可以包括以下步骤:
88.步骤s401:获取集群所有节点构成节点列表。
89.具体的,集群中每个节点如服务器可以包含节点管理器nm(nodemanager)。nm可以向rm发送心跳信息汇报自身的如负载信息和/或资源容器信息等。rm可以获取集群所有节点构成节点列表,节点列表可以包括节点标识、节点负载、节点属性等信息,但不限于此。
90.步骤s402:从所述节点列表中筛选过滤掉符合预设过滤条件的节点,得到待分配节点列表。
91.示例性的,在本公开的一些实施例中,所述预设过滤条件至少可以包括但不限于节点负载大于预设负载。预设负载可以自定义设置,对此不作限制。本实施例中也即可以过滤掉集群中节点负载较大的节点,基于剩余节点得到待分配节点列表。剩余节点可以理解为负载小,空闲资源较多的节点。
92.举例来说,节点列表中包括例如n1、n2、n3和n4共四个节点。过滤后得到的待分配节点列表包括例如n1、n2、n3共三个节点。
93.步骤s403:基于至少一个约束条件对所述待分配节点列表中的每个节点计算节点分值。
94.示例性的,计算节点分值即对节点打分(score),也即计算预计分配资源量。所述至少一个约束条件可以包括但不限于节点属性的弱约束条件,即不一定要满足的条件,尽力而为。节点属性例如可以包括但不限于节点的内存属性等。举例来说,例如有第一约束条
件和第二约束条件,第一约束条件可以包括但不限于以下至少一项:节点对应负载低于预定负载,节点对应内存大于预定内存。第二约束条件可以包括但不限于以下至少一项:节点分配平均,跳过高负载节点。其中,节点分配平均是指资源分配结束后,各个节点的已使用资源尽可能一致。跳过高负载节点可以是指资源请求尽可能跳过不符合负载阈值的节点。
95.具体的,每个第一线程可以基于第一约束条件对所述待分配节点列表中的每个节点如n1、n2、n3进行打分得到分值score1,同时可以基于第二约束条件对所述待分配节点列表中的每个节点如n1、n2、n3进行打分得到分值score2,然后对每个节点如n1、n2、n3的分值score1、score2进行加权计算得到最终分值。具体的打分计算方式可以参考现有技术理解,此处不再赘述。
96.步骤s404:基于所述节点分值从所述待分配节点列表中确定目标候选节点。
97.具体的,节点分值越大,则优先将对应节点作为目标候选节点。例如基于最终分值确定的目标候选节点为n1、n3。示例性的,如图3所示,为了适应性的与上述请求单元(request cell)匹配,目标候选节点可以分配候选单元(allocation candidate cell)的形式存在,即分配候选单元中包括例如确定的目标候选节点n1和n3。
98.步骤s405:在所述目标候选节点上为对应的所述请求单元中的所述多个刚性资源请求进行资源预分配。
99.具体的,例如在目标候选节点为n1、n3上为对应的请求单元request cell中的多个刚性资源请求进行资源预分配。
100.步骤s405之后跳转执行步骤s204,判断预分配结果满足对应的作业任务的资源需求量时,可以将分配候选单元(allocation candidate cell)转换为分配单元(allocation cell),以分配单元allocation cell为单位提交预分配结果至am。
101.本实施例中通过上述筛选过滤、计算节点分值等方式来确定最终的合适的节点,基于确定的节点的资源预分配,使得资源分配结果的准确性大为提高。
102.可选的,在本公开的一些实施例中,所述方法还可以包括以下步骤:每个所述第一线程在资源预分配之后,判断预分配结果不满足对应的作业任务的资源需求量时,取消预分配结果以释放所述预分配结果中的资源。这样可以在一个作业任务的刚性资源请求的资源量无法满足时,直接失败,并释放已预分配的资源,便于其他作业任务及时进行资源分配。
103.可选的,在本公开的一些实施例中,所述方法还可以包括以下步骤:
104.步骤i):在预分配结果不满足对应的作业任务的资源需求量时,判断所述作业任务所属的刚性资源请求是否携带指定重试信息。
105.本实施例中,一个作业任务所属的任意一个刚性资源请求可以携带指定重试信息,这样该刚性资源请求在分配一次资源若无法满足时,可以重试再一次进行分配。
106.步骤ii):若是,则将所述作业任务所属的刚性资源请求重新添加至所述请求队列中。
107.具体的,确定需要重试再一次进行分配时,可以将刚性资源请求重新添加至所述请求队列中,参考步骤s202中的详述内容,该重新添加的刚性资源请求例如属于作业任务1,则其重新添加至请求队列中的请求单元request cell1中,如属于作业任务2,则其重新添加至请求队列中的请求单元request cell2中。
108.本公开实施例还提供一种yarn集群资源调度方法,应用于资源管理器,如图5中所示,该方法包括以下步骤:
109.步骤s501:接收应用管理器发送的作业任务的作业资源请求;
110.步骤s502:确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中。
111.可以理解的是,上述步骤s501~s502可以参考前述实施例中对应的关于步骤s201~s202的详细描述,此处不再赘述。
112.步骤s503:启动多个第二线程,每个所述第二线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源分配处理。
113.示例性的,如图3所示,每个第二线程可以认为是一个事务,每个第二线程可以集中处理请求队列(request queue)中对应的一个请求单元(request cell)中的多个刚性资源请求,如线程1对应request cell1,线程2对应request cell2,线程n对应request celln。具体的,gang scheduler可以启动多个第二线程即开启事务,每个第二线程从请求队列中获取对应的请求单元中的多个刚性资源请求以进行资源分配处理。
114.本实施例的方案可以通过将作业资源请求添加至请求队列,之后再从请求队列中取作业资源请求进行资源调度,如此将am的心跳与资源调度解耦,am心跳发送作业资源请求之后,rm无需立即返回资源调度分配结果,可以异步从请求队列中取作业资源请求进行资源分配,在一定程度上提高调度性能。另外,在多个作业任务并发作业资源请求的情况下,每个作业任务所属的刚性资源请求涉及的节点资源的分配过程可以统一整体分配,在一定程度上提高了调度性能。
115.可选的,在本公开的一些实施例中,如图6中所示,上述步骤s503中每个所述第二线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源分配处理,具体可以包括以下步骤:
116.步骤s601:获取集群所有节点构成节点列表。
117.步骤s602:从所述节点列表中筛选过滤掉符合预设过滤条件的节点,得到待分配节点列表。
118.步骤s603:基于至少一个约束条件对所述待分配节点列表中的每个节点计算节点分值。
119.可以理解的是,步骤s601~s603的具体实施可以参考上述步骤s401~s403的详细描述,此处不再赘述。
120.步骤s604:基于每个节点的节点分值为对应的请求单元中的多个刚性资源请求进行资源分配。
121.本实施例与上述各实施例的区别在于,为单个节点计算节点分值之后,直接进行资源分配,无需预分配资源,可以在一定程度上提高资源调度的效率。
122.进一步的,可选的,在本公开的一些实施例中,步骤s604中基于每个节点的节点分值为对应的请求单元中的多个刚性资源请求进行资源分配,具体可以包括:基于每个节点的节点分值进行节点排序,获取排序后的每个节点的可分配资源;基于排序后的每个节点的可分配资源依次进行资源分配。
123.示例性的,可以基于每个节点的节点分值的大小进行节点排序,优先基于分值大的节点的可分配资源进行资源分配。可选的,在一些实施例中,可以这样依次多轮分配:如给节点n1计算出分值之后分配的时候,节点n1可能未必可以分配到预期的资源,如在此期间其他事务从该节点分配了资源。这种情况下直接取消释放资源是比较可惜的,同时考虑到弱约束的定义本身就是尽力而为,所以优化策略可以是先将该节点已有剩余资源分配,若该节点还有富余资源,则再参与一轮分配。
124.可选的,在本公开的一些实施例中,所述方法还可以包括以下步骤:对所述待分配节点列表中的每个节点计算节点分值之前,获取每个节点的可分配资源的快照信息;基于所述快照信息为每个节点计算节点分值。
125.具体的,由于多个线程在并发进行资源分配,存在并发冲突,使得某个线程获取的节点的可分配资源数据出现例如脏读问题。本实施例中获取每个节点的可分配资源的快照信息如可用快照(snapshot available),基于快照信息为每个节点进行打分score,进而实现后续的资源分配。
126.示例性的,每个第二线程在为例如节点n1计算score时不直接取当前的资源实际最新值,而是最开始时从节点n1获取最新的snapshot available资源,据此进行score,如此可以解决并发冲突导致的例如脏读问题。也可以是在整个第二线程处理期间以该节点的snapshot available做计算,以解决可重复读的问题。
127.在一些情况下,获取节点的快照进行资源分配,分配期间如果节点数据发生变化,可以提前中止事务即线程重新进行。
128.可选的,在本公开的一些实施例中,所述方法还可以包括:以下步骤:每个所述第二线程在资源分配之后,判断分配结果不满足对应的作业任务的资源需求量时,将所述作业任务所属的刚性资源请求重新添加至所述请求队列中。
129.具体的,例如每个第二线程对节点n1打分并计算出可分配资源后,直接分配资源容器,对后续节点同样进行操作。当对筛选后所有节点操作一轮后看是否满足作业任务的资源需求量,如果满足则提交成功,不满足则提交失败,失败时将对应的刚性资源请求重新放回请求队列中,以便继续进行资源分配。这样无需直接释放已分配的资源而是继续分配,在一定程度上提高调度性能。
130.需要说明的是,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。另外,也易于理解的是,这些步骤可以是例如在多个模块/进程/线程中同步或异步执行。
131.图7示出本公开实施例的yarn集群资源调度装置,应用于资源管理器,该装置可以包括:
132.请求接收模块701,用于接收应用管理器发送的作业任务的作业资源请求;
133.队列添加模块702,用于确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中;
134.预分配模块703,用于启动多个第一线程,每个所述第一线程从所述请求队列中获
取对应的每个所述请求单元中的多个刚性资源请求以进行资源预分配处理;
135.分配结果判断模块704,用于使每个所述第一线程在资源预分配之后,判断每个预分配结果是否满足对应的作业任务的资源需求量;
136.分配结果提交模块705,用于在所述分配结果判断模块的判断结果为是时,使每个所述第一线程分别提交所述预分配结果至所述应用管理器。
137.本实施例的yarn集群资源调度方法,可以通过将作业资源请求添加至请求队列,之后再从请求队列中取作业资源请求进行资源调度,如此将应用管理器am的心跳与资源调度解耦,am心跳发送作业资源请求之后,rm无需立即返回资源调度分配结果,可以异步从请求队列中取作业资源请求进行资源分配,在一定程度上提高调度性能,同时,多线程可以并发从请求队列中对应的请求单元中取对应作业任务的作业资源请求进行资源预分配并提交分配结果,在资源请求量增大时,缓解调度性能出现的瓶颈问题。另外,在多个作业任务并发作业资源请求的情况下,每个作业任务所属的刚性资源请求涉及的多个节点资源的分配过程可以统一整体分配或者统一回滚,在一定程度上提高了调度性能。
138.在本公开的一些实施例中,所述预分配模块,用于:获取集群所有节点构成节点列表;从所述节点列表中筛选过滤掉符合预设过滤条件的节点,得到待分配节点列表;基于至少一个约束条件对所述待分配节点列表中的每个节点计算节点分值;基于所述节点分值从所述待分配节点列表中确定目标候选节点;在所述目标候选节点上为对应的请求单元中的多个刚性资源请求进行资源预分配。
139.在本公开的一些实施例中,所述预设过滤条件至少包括节点负载大于预设负载;和/或,所述至少一个约束条件包括节点属性的弱约束条件。
140.在本公开的一些实施例中,所述装置还包括资源释放模块,用于使每个所述第一线程在资源预分配之后,判断预分配结果不满足对应的作业任务的资源需求量时,取消预分配结果以释放所述预分配结果中的资源。
141.在本公开的一些实施例中,所述装置还包括请求重试模块,用于在预分配结果不满足对应的作业任务的资源需求量时,判断所述作业任务所属的刚性资源请求是否携带指定重试信息;若是,则将所述作业任务所属的刚性资源请求重新添加至所述请求队列中。
142.本公开实施例还提供一种yarn集群资源调度装置,应用于资源管理器,如图8所示,该装置包括:
143.请求接收模块801,用于接收应用管理器发送的作业任务的作业资源请求;
144.队列添加模块802,用于确定所述作业资源请求是刚性资源请求时,将所述刚性资源请求添加至请求队列中;其中,所述请求队列中包括多个请求单元,不同作业任务所属的多个刚性资源请求被添加至对应的不同请求单元中;
145.分配模块803,用于启动多个第二线程,每个所述第二线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源分配处理。
146.在本公开的一些实施例中,所述分配模块803启动的每个所述第二线程从所述请求队列中获取对应的每个所述请求单元中的多个刚性资源请求以进行资源分配处理,具体可包括:获取集群所有节点构成节点列表;从所述节点列表中筛选过滤掉符合预设过滤条件的节点,得到待分配节点列表;基于至少一个约束条件对所述待分配节点列表中的每个节点计算节点分值;基于每个节点的节点分值为对应的请求单元中的多个刚性资源请求进
行资源分配。
147.在本公开的一些实施例中,所述分配模块803基于每个节点的打分结果为对应的请求单元中的多个刚性资源请求进行资源分配,包括:基于每个节点的节点分值进行节点排序,获取排序后的每个节点的可分配资源;基于排序后的每个节点的可分配资源依次进行资源分配。
148.在本公开的一些实施例中,所述装置还包括快照获取模块,用于对所述待分配节点列表中的每个节点计算节点分值之前,获取每个节点的可分配资源的快照信息。所述分配模块803,还用于基于所述快照信息为每个节点计算节点分值。
149.在本公开的一些实施例中,所述装置还可以包括请求重试模块,用于在每个所述第二线程在资源分配之后,判断分配结果不满足对应的作业任务的资源需求量时,将所述作业任务所属的刚性资源请求重新添加至所述请求队列中。
150.关于上述各实施例中的装置,其中各个模块执行操作的具体方式以及带来的相应技术效果已经在前文对应的有关该方法的实施例中进行了对应的详细描述,此处将不做详细阐述说明。
151.应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。作为模块或单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现木公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
152.本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一项实施例所述yarn集群资源调度方法的步骤。
153.示例性的,该可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd

rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
154.所述计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
155.本公开实施例还提供一种计算机设备,如图9中所示计算机设备可以包括处理器7901以及存储器902,存储器902用于存储计算机程序。其中,所述处理器901配置为经由执行所述计算机程序来执行上述任一项实施例中所述yarn集群资源调度方法的步骤。
156.所描述的实施例中的各方面、实施方式、实现或特征能够单独使用或以任意组合的方式使用。所描述的实施例中的各方面可由软件、硬件或软硬件的结合实现。所描述的实
施例也可以由存储有计算机可读代码的计算机可读介质体现,该计算机可读代码包括可由至少一个计算装置执行的指令。所述计算机可读介质可与任何能够存储数据的数据存储装置相关联,该数据可由计算机系统读取。用于举例的计算机可读介质可以包括只读存储器、随机存取存储器、cd

rom、hdd、dvd、磁带以及光数据存储装置等。所述计算机可读介质还可以分布于通过网络联接的计算机系统中,这样计算机可读代码就可以分布式存储并执行。
157.上述技术描述可参照附图,这些附图形成了本技术的一部分,并且通过描述在附图中示出了依照所描述的实施例的实施方式。虽然这些实施例描述的足够详细以使本领域技术人员能够实现这些实施例,但这些实施例是非限制性的;这样就可以使用其它的实施例,并且在不脱离所描述的实施例的范围的情况下还可以做出变化。比如,流程图中所描述的操作顺序是非限制性的,因此在流程图中阐释并且根据流程图描述的两个或两个以上操作的顺序可以根据若干实施例进行改变。作为另一个例子,在若干实施例中,在流程图中阐释并且根据流程图描述的一个或一个以上操作是可选的,或是可删除的。另外,某些步骤或功能可以添加到所公开的实施例中,或两个以上的步骤顺序被置换。所有这些变化被认为包含在所公开的实施例以及权利要求中。
158.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
159.以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1