作业调度方法、装置、电子设备和存储介质转让专利

申请号 : CN202211100132.2

文献号 : CN115202850B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 阚博文康波孟祥飞张健马庆珍郑刚聂鹏飞李青峰

申请人 : 国家超级计算天津中心

摘要 :

本公开涉及一种作业调度方法、装置、电子设备和存储介质,方法应用于调度系统,调度系统和多个计算节点通信连接,包括:根据获取的多个待调度作业的运行信息和预设运行文件,生成运行待调度作业时所需的模板文件;获取待调度作业对应的第一配置文件,以及多个计算节点对应的第二配置文件;根据第一配置文件、第二配置文件和模板文件,生成用于运行多个待调度作业的多个运行脚本;根据多个运行脚本和第一配置文件生成多个提交脚本,并将多个提交脚本提交到对应的计算节点上运行。本公开提供的方法,能够将庞大的作业数量合理高效的调度到有限的计算节点上,进一步还减少了对集群的调度系统和文件系统的影响。

权利要求 :

1.一种作业调度方法,其特征在于,应用于调度系统,所述调度系统和多个计算节点通信连接,所述方法包括:根据获取的多个待调度作业的运行信息和预设运行文件,生成运行所述待调度作业时所需的模板文件;

获取所述待调度作业对应的第一配置文件,以及所述多个计算节点对应的第二配置文件;

根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本;

根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,并将所述多个提交脚本提交到对应的计算节点上运行;

其中,所述根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本,包括:根据第一数值将所述多个待调度作业划分为至少一个第一待调度作业组;

根据所述第二配置文件将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组;

针对每个第二待调度作业组,根据所述模板文件和所述第一配置文件,生成所述每个第二待调度作业组对应的工作行,其中,所述工作行用于运行所述每个第二待调度作业组包括的第一数量的待调度作业;

针对每个第一待调度作业组,根据所述每个第一待调度作业组包括的多个第二待调度作业组中的每个第二待调度作业组对应的工作行,生成所述每个第一待调度作业组对应的运行脚本。

2.根据权利要求1所述的方法,其特征在于,所述第二配置文件包括支持所述计算节点运行的处理器的硬件核数和待调度作业运行所需的运行核数,所述根据所述第二配置文件将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组,包括:根据所述硬件核数、所述运行核数和第二数值,确定第一数量;

基于所述第一数量将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组,其中,每个第二待调度作业组包括所述第一数量的待调度作业。

3.根据权利要求1所述的方法,其特征在于,所述根据所述模板文件和所述第一配置文件,生成所述每个第二待调度作业组对应的工作行,包括:根据所述模板文件生成用于并行处理所述每个第二待调度作业组包括的待调度作业的第一语句;

生成用于将每个待调度作业的输出文件存储至第一文件夹的第二语句,其中,所述第一文件夹是以所述第一配置文件中包括的用户名命名的文件夹,所述输出文件是运行待调度作业得到的;

生成用于将第二文件夹存储的处理完成的每个待调度作业删除的第三语句,其中,所述第二文件夹是根据所述第一配置文件确定的;

根据所述第一语句、所述第二语句和所述第三语句,生成所述每个第二待调度作业组对应的工作行。

4.根据权利要求1所述的方法,其特征在于,所述第一配置文件包括用户名、每个计算节点可运行的脚本的第二数量和可使用的计算节点的第三数量,所述根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,包括:根据所述第二数量、所述多个运行脚本的数量和所述第三数量确定实际使用的计算节点的第一目标数量,其中,待生成的提交脚本的数量和所述第一目标数量相同;

根据所述多个运行脚本的数量和所述第一目标数量,确定每个待生成的提交脚本包括的运行脚本的第二目标数量;

针对每个待生成的提交脚本,基于所述第二目标数量的运行脚本和所述用户名生成所述提交脚本。

5.根据权利要求4所述的方法,其特征在于,所述根据所述多个运行脚本的数量和所述第一目标数量,确定每个待生成的提交脚本包括的运行脚本的第二目标数量,包括:根据所述多个运行脚本的数量和所述第一目标数量确定目标阈值和第三目标数量,其中,所述目标阈值小于所述第一目标数量;

若所述目标阈值不等于预设阈值,则所述第一目标数量的待生成的提交脚本中所述目标阈值个待生成的提交脚本包括第四目标数量的运行脚本,且所述第一目标数量的待生成的提交脚本中剩余待生成的提交脚本包括第三目标数量的运行脚本;

若所述目标阈值等于所述预设阈值,则所述第一目标数量的待生成的提交脚本中的每个待生成的提交脚本包括第三目标数量的运行脚本;

其中,所述第四目标数量为所述第三目标数量以及第三数值的和值,所述第二目标数量包括所述第四目标数量和/或所述第三目标数量。

6.根据权利要求4所述的方法,其特征在于,所述基于所述第二目标数量的运行脚本和所述用户名生成所述提交脚本,包括:生成用于创建以所述用户名命名的第一文件夹的第四语句;

生成用于提交所述第二目标数量的运行脚本的第五语句;

生成用于删除所述第一文件夹的第六语句;

根据所述第四语句、所述第五语句和所述第六语句,生成所述提交脚本。

7.一种作业调度装置,其特征在于,应用于调度系统,所述调度系统和多个计算节点通信连接,所述装置包括:第一生成模块,用于根据获取的多个待调度作业的运行信息和预设运行文件,生成运行所述待调度作业时所需的模板文件;

获取模块,用于获取所述待调度作业对应的第一配置文件,以及所述多个计算节点对应的第二配置文件;

第二生成模块,用于根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本;

第三生成模块,用于根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,并将所述多个提交脚本提交到对应的计算节点上运行;

其中,第二生成模块用于:

根据第一数值将所述多个待调度作业划分为至少一个第一待调度作业组;根据所述第二配置文件将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组;针对每个第二待调度作业组,根据所述模板文件和所述第一配置文件,生成所述每个第二待调度作业组对应的工作行,其中,所述工作行用于运行所述每个第二待调度作业组包括的第一数量的待调度作业;针对每个第一待调度作业组,根据所述每个第一待调度作业组包括的多个第二待调度作业组中的每个第二待调度作业组对应的工作行,生成所述每个第一待调度作业组对应的运行脚本。

8.一种电子设备,其特征在于,包括:

存储器;

处理器;以及

计算机程序;

其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如权利要求1至6中任一所述的作业调度方法。

9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6中任一所述的作业调度方法的步骤。

说明书 :

作业调度方法、装置、电子设备和存储介质

技术领域

[0001] 本公开涉及计算机技术领域,尤其涉及一种作业调度方法、装置、电子技术和存储介质。

背景技术

[0002] 随着高通量技术在生物、健康和医学领域的广泛应用,近年来,提出的分子对接方法已成为计算机辅助药物研究领域的一项重要技术。Zinc数据库是目前最大的有机小分子化合物库之一,许多类药分子的前期虚拟筛选都是基于Zinc数据库实现的,Zinc库中存储的化合物个数接近10亿,要对特定的受体进行全库筛选,可能会产生10亿个作业,这给现代高性能计算集群的调度系统和文件系统带来挑战。
[0003] 因此,急需将庞大的作业数量合理高效的调度到有限的计算节点上,并减少对集群的调度系统和文件系统的影响。

发明内容

[0004] 为了解决上述技术问题,本公开提供了一种作业调度方法、装置、电子设备和存储介质,能够将庞大的作业数量合理高效的调度到有限的计算节点上,进一步还减少了对集群的调度系统和文件系统的影响。
[0005] 第一方面,本公开实施例提供了一种作业调度方法,应用于调度系统,所述调度系统和多个计算节点通信连接,所述方法包括:
[0006] 根据获取的多个待调度作业的运行信息和预设运行文件,生成运行所述多个待调度作业时所需的模板文件;
[0007] 获取所述待调度作业对应的第一配置文件,以及所述多个计算节点对应的第二配置文件;
[0008] 根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本;
[0009] 根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,并将所述多个提交脚本提交到对应的计算节点上运行。
[0010] 第二方面,本公开实施例提供了一种作业调度装置,应用于调度系统,所述调度系统和多个计算节点通信连接,所述装置包括:
[0011] 第一生成模块,用于根据获取的多个待调度作业的运行信息和预设运行文件,生成运行所述多个待调度作业时所需的模板文件;
[0012] 获取模块,用于获取所述待调度作业对应的第一配置文件,以及所述多个计算节点对应的第二配置文件;
[0013] 第二生成模块,用于根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本;
[0014] 第三生成模块,用于根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,并将所述多个提交脚本提交到对应的计算节点上运行。
[0015] 第三方面,本公开实施例提供了一种电子设备,包括:
[0016] 存储器;
[0017] 处理器;以及
[0018] 计算机程序;
[0019] 其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现上述的作业调度方法。
[0020] 第四方面,本公开实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的作业调度方法的步骤。
[0021] 本公开实施例提供了一种作业调度方法,应用于调度系统,所述调度系统和多个计算节点通信连接,包括:根据获取的多个待调度作业的运行信息和预设运行文件,生成运行所述多个待调度作业时所需的模板文件;获取所述待调度作业对应的第一配置文件,以及所述多个计算节点对应的第二配置文件;根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述待调度作业的运行脚本;根据所述运行脚本和所述第一配置文件生成提交脚本,并将所述提交脚本提交到对应的计算节点上运行。本公开提供的方法,能够将庞大的作业数量合理高效的调度到有限的计算节点上,进一步还减少了对集群的调度系统和文件系统的影响。

附图说明

[0022] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0023] 为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0024] 图1为本公开实施例提供的一种集群架构示意图;
[0025] 图2为本公开实施例提供的一种作业调度方法的流程示意图;
[0026] 图3为本公开实施例提供的一种作业调度结构示意图;
[0027] 图4为本公开实施例提供的一种作业调度方法的流程示意图;
[0028] 图5为本公开实施例提供的一种第一层调度结构示意图;
[0029] 图6为本公开实施例提供的一种作业调度方法的流程示意图;
[0030] 图7为本公开实施例提供的一种作业调度方法的流程示意图;
[0031] 图8为本公开实施例提供的一种第二层作业调度结构示意图;
[0032] 图9为本公开实施例提供的一种作业调度装置的结构示意图;
[0033] 图10为本公开实施例提供的一种电子设备的结构示意图。

具体实施方式

[0034] 为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
[0035] 在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
[0036] 目前,分子对接技术是通过受体的特征以及受体和药物分子之间的相互作用方式来进行药物设计的方法,主要研究分子间的相互作用,并预测其结合模式和亲合力的一种理论模拟方法。近年来,分子对接方法已成为计算机辅助药物研究领域的一项重要技术。Zinc数据库是目前最大的有机小分子化合物库之一,许多类药分子的前期虚拟筛选都是基于这个数据库实现的。Zinc数据库中包括的化合物个数接近10亿(Zinc15),要对特定的受体进行全库筛选,会产生近10亿个作业,这给现代高性能计算集群的调度系统和文件系统带来了挑战。因此,如何调度以将庞大数量的作业映射到有限个计算节点上,并且对集群的调度系统和文件系统影响最小就变得非常重要。
[0037] 针对上述技术问题,本公开实施例提供了一种作业调度方法,应用于调度系统,调度系统采用了并行计算的方式,减少了调度时间;其次,以集群的一个计算节点为单位,将该计算节点计算出的所有关于作业的结果文件写到该计算节点的本地缓存中,并在本地缓存中打包压缩,再将压缩好的文件拷贝到共享存储(文件系统)中,最大程度的减少读写操作,降低了读写(IO)操作开销;另外,通过设定两个环境变量,针对不同规模的作业,在动态调节可使用的计算节点个数的同时,还不会影响整个集群的作业排队情况,且可以保证每一个计算节点长时间处于计算状态,提高计算效率;最后,通过设置在一个中央处理器(Central Processing Unit,CPU)上同时运行的作业个数,来确保其上计算节点在运算过程中,CPU的计算时间和IO的读写时间能够达到最大限度的重叠,并且也可以很好的避免CPU调度大量程序而引发的额外的调度开销。综上,本公开提供的方法可以一次性调度亿级作业,并高效地把作业分配到集群的计算节点上进行计算,同时还减少了IO操作以及调度的开销。具体通过下述一个或多个实施例进行详细说明。
[0038] 示例性的,参见图1,图1为本公开实施例提供的一种集群架构示意图,图1包括集群100,集群100可以在中央处理器上运行,集群100中包括调度系统101、登陆节点102、多个计算节点103和共享存储104(文件系统),调度系统101、登陆节点102以及多个计算节点103分别和共享存储104连接,调度系统101和登陆节点102以及多个计算节点103连接。其中,调度系统101可以是SLURM调度系统(Job Schedule System),登陆节点102为用户使用调度系统101时所在的计算机节点,用户在登陆节点102处提交作业到计算节点103上,用户提交作业时,调度系统101会将作业分配到计算节点上,其中多个计算节点103通过网线连接到共享存储104中,多个计算节点103之间还可以相互通信,多个计算节点103可以记为1号计算节点、2号计算节点、3号计算节点至n号计算节点,其中,多个计算节点103中的每个计算节点在本地也挂载一块本地缓存,用于存储计算时产生的临时数据,多个计算节点103之间也通过物理网线互联,用于互相传递数据。
[0039] 图2为本公开实施例提供的一种作业调度方法的流程示意图,应用于调度系统101,具体的还可以设置一个和调度系统101进行交互的高通量调度引擎,高通量调度引擎支持调度系统101运行,因此,作业调度方法也可以看作是高通量调度引擎执行的,其中,调度系统101和多个计算节点103通信连接,具体包括如图2所示的如下步骤S210至S240:
[0040] S210、根据获取的多个待调度作业的运行信息和预设运行文件,生成运行所述待调度作业时所需的模板文件。
[0041] 可理解的,用户通过登陆节点103使用调度系统101,向调度系统101提交大量待调度作业,调度系统101获取多个待调度作业的运行信息,运行信息包括多个待调度作业的运行逻辑,多个待调度作业具有相同的运行逻辑,例如,运行逻辑是加法运算。随后,根据运行信息和预设运行文件,生成运行待调度作业时所需的模板文件,预设运行文件可以是预先在调度系统中存储或配置的和运行信息相匹配的特定程序,模板文件是该程序运行一次作业时的所需的文件,后续的所有作业运行时都会依据该模板文件设定的格式来运行。
[0042] S220、获取所述待调度作业对应的第一配置文件,以及所述多个计算节点对应的第二配置文件。
[0043] 可理解的,在上述S210的基础上,多个待调度作业提交时,还会生成对应的第一配置文件,调度系统读取第一配置文件和连接的多个计算节点对应的第二配置文件,其中,第一配置文件包括用户名、输入文件夹、输出文件夹、计划使用的最大计算节点个数、每个计算节点最少运行脚本个数和调度引擎检查作业状态的时间间隔,用户名是指通过登陆节点提交多个待调度作业的用户的名称,并以该用户名命名第一文件夹,便于后续在计算节点的本地缓存中创建第一文件夹;输入文件夹是指大规模作业的输入文件的文件夹,用于存储作业文件的输入文件,后续可以在该输入文件夹中获取到所有需要处理的作业的输入文件,同时还可以从中获取到待调度作业的数量,也就是需要运行的作业文件的总数;输出文件夹用于存储作业运行后输出的输出文件;计划使用的最大计算节点个数用于对大规模作业使用的计算节点的数量进行限制,在最大计算节点个数范围内可以根据作业总数对使用的计算节点个数进行动态调节,调节范围为0 最大计算节点个数;期望每个计算节点最少~运行的运行脚本的个数,该参数用于增加每个计算节点的计算量,减少调度系统调度和计算作业时所产生的开销,同时也可以减少调度系统产生的作业编号(ID)个数;调度引擎检查作业状态的时间间隔,时间间隔可以是1s,该参数用于设置调度引擎连续两次检测每个作业的状态的时间间隔,避免时间间隔过小,导致的调度引擎频繁访问调度系统数据库(SLURM数据库),会对SLURM数据库造成一定的负载压力的问题,还能够避免时间间隔过大,导致调度引擎等待的问题,有效减少计算资源的浪费现象。第二配置文件包括支持计算节点运行的CPU的硬件核数和一个作业运行所需的运行核数,其中,集群上的每个节点都存在对应的CPU,例如,登陆节点存在对应的一个CPU来支持运行,每个计算节点也都存在对应的一个CPU来支持运行,共享存储可能存在多个对应的CPU支持运行。
[0044] S230、根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本。
[0045] 可理解的,在上述S210和S220的基础上,根据获取的第一配置文件、第二配置文件和模板文件生成多个运行脚本,多个运行脚本用于运行多个待调度作业,每个运行脚本可以并行的运行至少一个待调度作业,生成运行脚本可以看作是调度系统进行的第一层调度。
[0046] S240、根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,并将所述多个提交脚本提交到对应的计算节点上运行。
[0047] 可理解的,在上述S230的基础上,根据生成的多个运行脚本和获取的第一配置文件并行的生成多个提交脚本,每个提交脚本包括至少一个运行脚本,至少一个运行脚本按照提交顺序依次执行,生成提交脚本可以看作是调度系统进行的第二层作业调度。随后将提交脚本串行的提交到对应的计算节点上去运行,其中,生成的提交脚本的数量可以和可使用的计算节点的数量相同,也可以不同,具体可以根据用户需求自行确定。
[0048] 示例性的,参见图3,图3为本公开实施例提供的一种作业调度结构示意图,图3包括配置文件310、输入文件320、第一层调度330和第二层调度340,输入文件320为大规模作业的输入文件,记为大规模作业输入文件320,调度引擎获取到配置文件310和大规模作业输入文件320后,将配置文件310和大规模作业输入文件320传输至第一层调度330,第一层调度330生成多个运行脚本,并将多个运行脚本传输至第二层调度340,第二层调度340基于多个运行脚本生成多个提交脚本,随后将多个提交脚本提交至对应的计算节点上运行。
[0049] 本公开实施例提供的一种作业调度方法,获取到配置文件后,依据特定的程序生成该程序运行一次作业时所需的模板文件,随后通过第一层调度,进行第一次封装,将大规模作业的输入文件封装成多个运行脚本,最后,通过第二层调度,依据每个计算节点最少运行的运行脚本数量进行第二层封装,将多个运行脚本封装成多个提交脚本,将提交脚本提交至对应的计算节点上运行,完成大规模作业调度。本公开提供的方法,从高通量计算和高性能计算的角度,实现对亿级作业调度的策略,且对集群的共享存储(文件系统)和调度系统几乎没有影响。
[0050] 在上述实施例的基础上,图4为本公开实施例提供的一种作业调度方法的流程示意图,可选的,所述根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本,具体包括如图4所示的如下步骤S410至S440:
[0051] S410、根据第一数值将所述多个待调度作业划分为至少一个第一待调度作业组。
[0052] 可理解的,确定多个待调度作业的数量,依据每组第一数值的输入文件,将多个待调度作业划分为至少一个第一待调度作业组,每个第一待调度作业组包括第一数值的待调度作业。例如,大规模作业输入文件共N个,也就是包括N个待调度作业,高通量调度引擎依据每组M个作业文件,第一数值为M,将其分为K个第一待调度作业组,其中 ,其中,符号表示对x向上取整,如x=4.1,则 ,也就是对数值K向上取整。高通量调度引擎会并行的处理每个第一待调度作业组所包括的待调度作业的输入文件。
[0053] S420、根据所述第二配置文件将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组。
[0054] 可理解的,在上述S410的基础上,针对至少一个第一待调度作业组中的每个第一待调度作业组,根据第二配置文件对每个第一待调度作业组包括的多个待调度作业进行划分,划分为多个第二待调度作业组,其中,每个第一待调度作业组包括的待调度作业的数量相同,或者,只有一个第一待调度作业组和其他第一待调度作业组包括的待调度作业的数量不同,或者每个第一待调度组包括的作业数量不完全相同,具体确定每个第一待调度组所包括的作业数量的方式不作限定,每个第二待调度作业组同样包括多个待调度作业,也就是在第一待调度作业组的基础上进行更细的划分。
[0055] 其中,所述第二配置文件包括支持所述计算节点运行的处理器的硬件核数和待调度作业运行所需的运行核数。
[0056] 可选的,划分多个第二待调度作业组具体可以通过下述步骤实现:
[0057] 根据所述硬件核数、所述运行核数和第二数值,确定第一数量;基于所述第一数量将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组,其中,每个第二待调度作业组包括所述第一数量的待调度作业。
[0058] 可理解的,依据CPU硬件核数对第一待调度作业组包括的多个待调度作业进行更细致的调度,根据硬件核数、运行核数和第二数值确定并行运行的待调度作业的个数,也就是第一数量,划分得到的每个第二待调度作业组都包括第一数量的待调度作业,随后,根据第一数量和第一待调度作业组包括的待调度作业的数量,确定第二待调度作业组的数量。例如,CPU硬件核数为NCore,NCore为32,一个待调度作业运行需要的运行核数为MCore,MCore为4,那么并行运行的待调度作业的个数即第一数量为 ,也就是计算得到的第一数量为8,每个第二待调度组都包括8个待调度作业。由于多个作业并行运行时,每个作业完成的先后顺序不同,当某一个作业优先完成时,另一个作业还在运算时,先完成的作业释放出的CPU核心将处于空闲状态,会造成计算资源的浪费,而设置过多的并行作业任务,则会导致CPU忙于各个作业之间的调度处理,CPU的有效计算时间减少,调度时间增加,因此,基于上述两种情况的考虑,在根据硬件核数和运行核数确定第一数量时,设置一个第二数值作为动态补充,此时,并行运行作业的个数即第一数量为 ,上述示例中第一数量为8+2=10,优选的,第二数值为2,也就是将2个作业作为排队待处理的作业,并行处理的8个作业中第一个最先处理完作业的CPU,继续处理2个作业中某一个待处理的作业,8个作业中第二个处理完作业的CPU,继续处理2个作业中剩下的一个待处理的作业,直至所有作业处理完成,该种方式,既能充分利用CPU的计算资源,又能够避免CPU出现长时间调度作业的情况,进一步减少调度时间。
[0059] 可理解的,多个第一待调度作业组之间并行处理,多个第二待调度作业组之间也是串行处理,第二待调度作业组内包括的第一数量的待调度作业并行处理,也就是并行的生成大量运行脚本。
[0060] S430、针对每个第二待调度作业组,根据所述模板文件和所述第一配置文件,生成所述每个第二待调度作业组对应的工作行。
[0061] 其中,所述工作行用于运行所述每个第二待调度作业组包括的第一数量的待调度作业。
[0062] 可理解的,在上述S420的基础上,将第一数量的待调度作业作为一组进行并行计算,同时根据作业运行时所依据的模板文件和第一配置文件,生成每个第二待调度作业组对应的工作行,也就是每个第二待调度作业组对应一个工作行,工作行用于并行处理第二待调度作业组包括的第一数量的待调度作业,工作行可以记为job warp。
[0063] 可选的,确定工作行具体可以通过下述步骤实现:
[0064] 根据所述模板文件生成用于并行处理所述每个第二待调度作业组包括的待调度作业的第一语句;生成用于将每个待调度作业的输出文件存储至第一文件夹的第二语句,其中,所述第一文件夹是以所述第一配置文件中包括的用户名命名的文件夹,所述输出文件是运行待调度作业得到的;生成用于将第二文件夹存储的处理完成的每个待调度作业删除的第三语句,其中,所述第二文件夹是根据所述第一配置文件确定的;根据所述第一语句、所述第二语句和所述第三语句,生成所述每个第二待调度作业组对应的工作行。
[0065] 可理解的,根据模板文件生成第一语句,第一语句用于并行处理第二待调度作业包括的第一数量的待调度作业;生成的第二语句用于将第一语句处理完待调度作业后生成的输出文件进行存储,将输出文件存储至以用户名命名的第一文件夹,用户名为上述第一配置文件中的用户名;生成的第三语句用于将第二文件夹内存储的待调度作业的输入文件(作业文件)删除,第二文件夹也就是上述第一配置文件中的输入文件夹,随后将第一语句、第二语句和第三语句组成一个工作行。工作行的工作流程包括:对第二待调度作业组中第一数量的待调度作业进行并行处理,并将生成的输出文件写入到上述以用户名命名创建在计算节点本地缓存中的文件夹(第一文件夹)里,随后删除文件系统(共享存储)中第二文件夹内该组作业的输入文件,以减少文件系统的文件总数,随后将生成的三个语句作为一个job warp进行后续对作业的调度。具体的,每个第一待调度作业组对应一个运行脚本,一个运行脚本里包含W个job warp和一个文件传输模块,其中, ,共有K个第一待调度作业组,会生成K个运行脚本,每个第一待调度作业组包括M个待调度作业,M个待调度作业又划分为W个第二待调度作业组,每个第二待调度作业组包括P个待调度作业,文件传输模块主要负责将W个job warp产生的输出文件进行压缩,并作为一个整体传输到集群的文件系统,针对每个运行脚本从脚本开始运行到结束,总共触发一次文件系统的访问。
[0066] S440、针对每个第一待调度作业组,根据所述每个第一待调度作业组包括的多个第二待调度作业组中的每个第二待调度作业组对应的工作行,生成所述每个第一待调度作业组对应的运行脚本。
[0067] 可理解的,在上述S430的基础上,针对每个第一待调度作业组,每个第一待调度作业组被划分为W个第二待调度作业组,每个第二待调度作业组存在一个对应的工作行,根据W个工作行和一个文件传输模块生成第一待调度作业组对应的运行脚本,也就是一个运行脚本里包含W个job warp和一个文件传输模块,每个第一待调度作业组存在一个对应的运行脚本。
[0068] 示例性的,参见图5,图5为本公开实施例提供的一种第一层调度结构示意图,图5包括大规模作业输入文件510、第一待调度作业组520、W个第二待调度作业组530、W个工作行540、文件传输模块550和第1号运行脚本560,其中,大规模作业输入文件510包括划分的K个第一待调度作业组,第一待调度作业组520为K个第一待调度作业组中的第一组,第一待调度作业组520包括n‑1个作业输入文件,记为第1号作业输入文件至第n号作业输入文件,随后根据设置的并行运行的作业的数量,将第一待调度作业组520划分为W个第二待调度作业组530,W个第二待调度作业组530记为第1号第二待调度作业组至W号第二待调度作业组,每个第二待调度作业组存在一个对应的工作行,例如,第1号第二待调度组对应的工作行为第1号job warp,每个job warp包括3个语句,记为第一语句、第二语句和第三语句,第一语句用于并行运行第1号作业至第k号作业,第二语句用于将第1号作业至第k号作业的输出文件写入到计算节点的本地缓存中,第三语句用于删除第1号作业至第k号作业的输入文件,根据W个工作行540和文件传输模块550得到第1号运行脚本560,文件传输模块550用于将第1号作业至第n号作业的输出文件在本地缓存中打包并传输至集群的共享存储中。
[0069] 可理解的,一个job warp里的多个作业并行运行,保证了CPU使用率,同时作业运行的结果写到计算节点的本地缓存中而非集群的共享存储中,有效减少了共享存储的访问次数,进一步的运行脚本还会将每个job warp输出的文件打包成一个压缩文件,再将压缩文件移动到共享存储的输出目录下,一个运行脚本仅触发一次写共享存储的操作,同时运行了多个作业。
[0070] 本公开实施例提供的一种作业调度方法,根据每组设置的作业文件数量对大规模作业文件进行划分,划分为多个第一待调度作业组,每个第一待调度作业组包括多个作业文件,随后针对每个第一待调度作业组进一步细化,划分为多个第二待调度作业组,每个第二待调度作业组包括多个作业文件,利用硬件核数和运行一个作业文件所需的运行核数,确定多个可并行运行的作业文件个数,同时为了避免计算资源的浪费,在确定的作业文件个数的基础上,增加第二数值的作业文件,用以平衡计算资源,提高CPU的有效计算时间,进一步减少调度时间;针对每个第二待调度作业组,将第二待调度作业组内的作业文件进行并行计算,同时将该组的作业文件运行后生成的输出文件存储到计算节点的本地缓存中以用户名命名的第一文件夹内,并相应的删除共享存储中存储的作业文件,以减少共享存储的文件总数,释放更多存储空间,上述针对每个第二待调度作业组的工作流程作为一个工作行,也就是每个第二待调度作业组都存在一个工作行;针对第一待调度作业组,根据该组划分得到的多个第二待调度作业组对应的多个工作行和文件传输模块生成一个运行脚本,也就是一个第一待调度作业组对应一个运行脚本,工作行用于运行作业文件、存储输出文件以及删除作业文件,文件传输模块用于将输出文件进行压缩并传输至共享存储,整个运行脚本运行多个作业文件时,会触发一次共享存储的访问,采用并行计算的方式有效提高了计算效率,减少了计算时间,进一步还减少了共享存储读写操作的开销。
[0071] 在上述实施例的基础上,图6为本公开实施例提供的一种作业调度方法的流程示意图,可选的,所述根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,具体包括如图6所示的如下步骤S610至S630:
[0072] 其中,所述第一配置文件包括用户名、每个计算节点可运行的脚本的第二数量和可使用的计算节点的第三数量。
[0073] 可理解的,第一配置文件中包括用户名,用户名用于在计算节点的本地缓存中创建以用户名命名的用于存储临时数据的第一文件夹,用于存储运行脚本基于作业的输入文件得到的输出文件,第一配置文件中还包括计划使用的最大计算节点个数(第三数量),记为MaxNode,还包括期望每个计算节点最少运行的运行脚本个数(第二脚本),记为PerferJobsPerNode。
[0074] S610、根据所述第二数量、所述多个运行脚本的数量和所述第三数量确定实际使用的计算节点的第一目标数量。
[0075] 其中,所述待生成的提交脚本的数量和所述第一目标数量相同。
[0076] 可理解的,根据第二数量PerferJobsPerNode和多个运行脚本的数量确定实际使用的 计 算 节点 的 数 量 ,实际 使 用的 节点 个 数 记为 N od e C o un t ,则,确定实际使用的节点个数第一目标数量NodeCount后,判断NodeCount和第三数量MaxNode的大小,若实际使用的计算节点的数量
,则 ,反之 ,
确保根据具体的作业文件的总数,动态的调度计算节点的数量。其中,后续生成的提交脚本的数量和实际可使用的计算节点的数量相同,也就是向每个实际可使用的计算节点提交一个提交脚本,向每个计算节点提交的提交脚本的数量可根据实际需求自行确定,若计算节点不充足,可以为1个计算节点分配2个提交脚本。将多个运行脚本按照该种方法进行分组,既可以达到动态调节计算节点数量的目的,又可以保障每个参与计算的计算节点能够进行充分的计算。
[0077] S620、根据所述多个运行脚本的数量和所述第一目标数量,确定每个待生成的提交脚本包括的运行脚本的第二目标数量。
[0078] 可理解的,在上述S610的基础上,根据运行脚本的数量K和第一目标数量NodeCount,确定每个待生成的提交脚本包括的运行脚本的数量(第二目标数量),第二目标数量记为S。
[0079] 可选的,确定第二目标数量具体可以下述步骤实现:
[0080] 根据所述多个运行脚本的数量和所述第一目标数量确定目标阈值和第三目标数量,其中,所述目标阈值小于所述第一目标数量;若所述目标阈值不等于预设阈值,则所述第一目标数量的待生成的提交脚本中所述目标阈值个待生成的提交脚本包括第四目标数量的运行脚本,且所述第一目标数量的待生成的提交脚本中剩余待生成的提交脚本包括第三目标数量的运行脚本;若所述目标阈值等于所述预设阈值,则所述第一目标数量的待生成的提交脚本中的每个待生成的提交脚本包括第三目标数量的运行脚本;其中,所述第四目标数量为所述第三目标数量以及第三数值的和值,所述第二目标数量包括所述第四目标数量和/或所述第三目标数量。
[0081] 可理解的,根据运行脚本的数量K和第一目标数量NodeCount计算得到目标阈值Y和第三目标数量S,其中 ,第三目标数量为商,目标阈值为余数,目标阈值要小于第一目标数量,例如K能把NodeCount整除,那么目标阈值就为0。判断目标阈值和预设阈值的关系,预设阈值为0,也就是确定是否能够整除,若目标阈值不等于预设阈值,也就是不能整除,则NodeCount个待生成的提交脚本中Y个待生成的提交脚本所包括的运行脚本的个数为第四目标数量,剩余NodeCount‑Y个待生成的提交脚本所包括的运行脚本的个数为第三目标数量,其中,第四目标数量为第三目标数量同第三数值的和值,优选的,第三数值为1。例如,K为82,NodeCount为10,可以确定S为8,Y为2,也就是10个待生成的提交脚本中前2个提交脚本包括的运行脚本的数量(第四目标数量)均为8+1=9,剩余8个提交脚本包括的运行脚本的数量(第三目标数量)为8;若目标阈值等于预设阈值,也就是能整除,每个待生成的提交脚本包括第三目标数量的运行脚本,即 ,该种为
提交脚本分配运行脚本的方法,保证了各个提交脚本分配到的运行脚本个数相差不超过1,可以解决由于作业分配不均匀引起的计算节点负载不均衡,导致先完成作业的计算节点长时间等待分配作业数多的计算节点完成作业的问题。
[0082] 示例性的,参见图7,图7为本公开实施例提供的一种作业调度方法的流程示意图,输入K个大规模作业运行脚本,根据运行脚本的数量K和每个计算节点最少运行的脚本个数PerferJobsPerNode确定实际使用的计算节点个数NodeCount,并判断实际使用的节点个数NodeCount同计划使用的最大计算节点个数MaxNode的大小,即判断,若是,则 ,若否,则;随后,判断运行脚本的总数K是否能够整除计算节点个数NodeCount,
即判断K % NodeCount == 0,若是,则每个提交脚本 中包含
个运行脚本,若否,则前K % NodeCount个提交脚本包含 个运行脚本,剩余提交脚本包含 个运行脚本。
[0083] S630、针对每个待生成的提交脚本,基于所述第二目标数量的运行脚本和所述用户名生成所述提交脚本。
[0084] 可选的,生成提交脚本具体可以通过下述步骤实现:
[0085] 生成用于创建以所述用户名命名的第一文件夹的第四语句;生成用于提交所述第二目标数量的运行脚本的第五语句;生成用于删除所述第一文件夹的第六语句;根据所述第四语句、所述第五语句和所述第六语句,生成所述提交脚本。
[0086] 可理解的,在上述S620的基础上,生成第四语句,第四语句用于在计算节点的本地缓存中创建以用户名命名的第一文件夹,第一文件夹也就是上述运行脚本的第二语句中涉及到的用于存储输出文件的文件夹,第二语句用于向第一文件夹里存储输出文件,第四语句用于创建存储输出文件的第一文件夹;生成第五语句,第五语句用于提交第二目标数量的运行脚本,以使运行脚本运行;生成的第六语句用于删除第一文件夹内临时存储的输出文件。可理解的是,生成大量提交脚本的步骤也是并行处理的,也就是并行的生成大量提交脚本。
[0087] 可理解的,每个提交脚本提交到计算节点上运行时,可以将提交脚本包括的所有运行脚本均运行完成且生成压缩后的输出文件存储至第一文件夹后,再将所有输出文件进一步压缩后再传输至共享存储,传输完成后将第一文件夹删除,其中,提交脚本包括的运行脚本是按照提交顺序依次执行的,还可以每个运行脚本运行完成并生成一个压缩后的输出文件后,就将该压缩后的输出文件直接传出至共享存储。例如,提交脚本1包括3个运行脚本,3个运行脚本依次运行,每个运行脚本都会输出一个压缩后的输出文件存储至第一文件夹,将第一文件夹内存储的3个压缩后的输出文件再次进行压缩,传输至共享存储;另一种可行的场景,运行脚本1输出的一个压缩后的输出文件1存储至第一文件夹后,将该压缩后的输出文件1直接传输至共享存储,传输完成后,将该压缩后的输出文件1删除,在传输的同时,运行脚本2运行,并执行和运行脚本1相同的流程,其他运行脚本的执行流程不作赘述。
[0088] 示例性的,参见图8,图8为本公开实施例提供的一种第二层作业调度结构示意图,图8包括大规模作业运行脚本810、第一组运行脚本820和第1号提交脚本830,其中,大规模作业运行脚本810包括多组运行脚本,每组运行脚本包括多个运行脚本,第一组运行脚本820为大规模作业运行脚本810中的第一组,第一组运行脚本820包括第1号运行脚本至第n号运行脚本,第1号提交脚本830为第一组运行脚本820对应的一个提交脚本,提交脚本830包括3个语句,记为第四语句、第五语句和第六语句,第四语句用于在计算节点的本地缓存中创建作为临时文件夹使用的第一文件夹,第五语句用于提交处理从第一组运行脚本810中顺序提交的运行脚本,例如提交第1号运行脚本后,再提交第2号运行脚本,依次类推,直至提交第n号运行脚本,第六语句用于在本地缓存中删除临时文件夹。
[0089] 本公开实施例提供的一种作业调度方法,通过运行脚本的总数、每个计算节点最少运行的运行脚本数量和计划使用的最大计算节点个数,确定实际可使用的计算节点的数量,能够基于具体的作业文件个数,动态调度计算节点的个数;每个计算节点上运行一个提交脚本,根据实际可使用的计算节点的数量,计算每个待生成的提交脚本所包括的运行脚本的个数,能够确保各个提交脚本分配到的运行脚本个数相差不超过1,可以解决由于作业文件分配不均匀引起的计算节点负载不均衡,导致先完成作业文件的计算节点长时间等待分配作业文件数量较多的计算节点完成作业;另外,每个提交脚本还包含在计算节点的本地缓存中创建第一文件夹和删除第一文件夹的语句,用以支持运行脚本内作业文件的输出文件临时存储在计算节点的本地缓存中,以减少对共享系统读写操作的开销。本公开提供的方法并行地生成提交脚本,并串行地提交到计算节点上去运行,计算速度比较快。
[0090] 图9为本公开实施例提供的一种作业调度装置的结构示意图。本公开实施例提供的作业调度装置可以执行上述作业调度方法实施例提供的处理流程,作业调度装置900应用于调度系统,所述调度系统和多个计算节点通信连接,所述装置如图9所示,作业调度装置900包括第一生成模块910、获取模块920、第二生成模块930和第三生成模块940,其中:
[0091] 第一生成模块910,用于根据获取的多个待调度作业的运行信息和预设运行文件,生成运行所述待调度作业时所需的模板文件;
[0092] 获取模块920,用于获取所述待调度作业对应的第一配置文件,以及所述多个计算节点对应的第二配置文件;
[0093] 第二生成模块930,用于根据所述第一配置文件、所述第二配置文件和所述模板文件,生成用于运行所述多个待调度作业的多个运行脚本;
[0094] 第三生成模块940,用于根据所述多个运行脚本和所述第一配置文件生成多个提交脚本,并将所述多个提交脚本提交到对应的计算节点上运行。
[0095] 可选的,第二生成模块具体用于:
[0096] 根据第一数值将所述多个待调度作业划分为至少一个第一待调度作业组;
[0097] 根据所述第二配置文件将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组;
[0098] 针对每个第二待调度作业组,根据所述模板文件和所述第一配置文件,生成所述每个第二待调度作业组对应的工作行,其中,所述工作行用于运行所述每个第二待调度作业组包括的第一数量的待调度作业;
[0099] 针对每个第一待调度作业组,根据所述每个第一待调度作业组包括的多个第二待调度作业组中的每个第二待调度作业组对应的工作行,生成所述每个第一待调度作业组对应的运行脚本。
[0100] 可选的,所述第二配置文件包括支持所述计算节点运行的处理器的硬件核数和待调度作业运行所需的运行核数。
[0101] 可选的,第二生成模块930具体用于:
[0102] 根据所述硬件核数、所述运行核数和第二数值,确定第一数量;
[0103] 基于所述第一数量将所述至少一个第一待调度作业组中的每个第一待调度作业组划分为多个第二待调度作业组,其中,每个第二待调度作业组包括所述第一数量的待调度作业。
[0104] 可选的,第二生成模块930具体用于:
[0105] 根据所述模板文件生成用于并行处理所述每个第二待调度作业组包括的待调度作业的第一语句;
[0106] 生成用于将每个待调度作业的输出文件存储至第一文件夹的第二语句,其中,所述第一文件夹是以所述第一配置文件中包括的用户名命名的文件夹,所述输出文件是运行待调度作业得到的;
[0107] 生成用于将第二文件夹存储的处理完成的每个待调度作业删除的第三语句,其中,所述第二文件夹是根据所述第一配置文件确定的;
[0108] 根据所述第一语句、所述第二语句和所述第三语句,生成所述每个第二待调度作业组对应的工作行。
[0109] 可选的,所述第一配置文件包括用户名、每个计算节点可运行的脚本的第二数量和可使用的计算节点的第三数量。
[0110] 可选的,第三生成模块940具体用于:
[0111] 根据所述第二数量、所述多个运行脚本的数量和所述第三数量确定实际使用的计算节点的第一目标数量,其中,所述待生成的提交脚本的数量和所述第一目标数量相同;
[0112] 根据所述多个运行脚本的数量和所述第一目标数量,确定每个待生成的提交脚本包括的运行脚本的第二目标数量;
[0113] 针对每个待生成的提交脚本,基于所述第二目标数量的运行脚本和所述用户名生成所述提交脚本。
[0114] 可选的,第三生成模块940具体用于:
[0115] 根据所述多个运行脚本的数量和所述第一目标数量确定目标阈值和第三目标数量,其中,所述目标阈值小于所述第一目标数量;
[0116] 若所述目标阈值不等于预设阈值,则所述第一目标数量的待生成的提交脚本中所述目标阈值个待生成的提交脚本包括第四目标数量的运行脚本,且所述第一目标数量的待生成的提交脚本中剩余待生成的提交脚本包括第三目标数量的运行脚本;
[0117] 若所述目标阈值等于所述预设阈值,则所述第一目标数量的待生成的提交脚本中的每个待生成的提交脚本包括第三目标数量的运行脚本;
[0118] 其中,所述第四目标数量为所述第三目标数量以及第三数值的和值,所述第二目标数量包括所述第四目标数量和/或所述第三目标数量。
[0119] 可选的,第三生成模块940具体用于:
[0120] 生成用于创建以所述用户名命名的第一文件夹的第四语句;
[0121] 生成用于提交所述第二目标数量的运行脚本的第五语句;
[0122] 生成用于删除所述第一文件夹的第六语句;
[0123] 根据所述第四语句、所述第五语句和所述第六语句,生成所述提交脚本。
[0124] 图9所示实施例的作业调度装置可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0125] 图10为本公开实施例提供的一种电子设备的结构示意图。本公开实施例提供的电子设备可以执行上述实施例提供的处理流程,如图10所示,电子设备1000包括:处理器1100、通讯接口1200和存储器1300;其中,计算机程序存储在存储器1300中,并被配置为由处理器1100执行如上述的作业调度方法。
[0126] 另外,本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的作业调度方法。
[0127] 此外,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序或指令,该计算机程序或指令被处理器执行时实现如上所述的作业调度方法。
[0128] 需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0129] 以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。