一种任务处理方法和设备技术领域
本申请涉及数据处理技术领域,尤其涉及一种任务处理方法和设备。
背景技术
对于一个繁忙的大型集群系统,每天会有数十万量级次数的临时查询任
务,这些临时查询任务中,大部分取数任务基本只会运行一次。
在现有的技术方案中,默认情况下,系统认为输入文件大小都是整张表的
大小,且一个表可以处理256M的数据,这样就可以控制该任务需要的表数。
但是,申请人在实现本申请的过程中发现现有技术中存在以下技术问题:
实际应用中,很多的任务都不是取的整张表的所有字段,且很多任务都有
很多特殊的操作,如LIMIT(限定)、GBY(聚合)等,如果仍按照默认算法,
会导致很多任务分配不到合理的计算资源,进而影响集群任务的吞吐量,导致
部分任务由于不能及时得到计算资源而长期等待,进而会对用户体验造成非常
恶劣的影响。
发明内容
本申请实施例提供了一种任务处理方法及设备,用以对运行的任务进行个
性化分配计算资源,保障任务得到合理的资源,提高任务执行效率,从而保证
计算集群的资源利用率,提升任务并发度。
为此,本申请采用以下技术手段:
本申请实施例提供了一种任务处理方法,该方法包括:
当任务管理设备接收到任务时,所述任务管理设备判断所述任务的输入数
据量是否已经被配置为全表数据量;
如果判断结果为否,所述任务管理设备调用内置优化接口,确定所述任务
的实际输入数据量;
所述任务管理设备判断所述任务所在集群的组的当前限额使用率是否超
过预设阈值;
如果没有超过,所述任务管理设备判断所述实际输入数据量是否大于全表
数据量;
如果大于,所述任务管理设备根据所述实际输入数据量,为所述任务分配
资源,并执行所述任务。
另一方面,本申请实施例还提供了一种任务管理设备,包括:
接收模块,用于接收任务;
第一判断模块,用于判断所述接收模块所接收到的任务的输入数据量是否
已经被配置为全表数据量;
确定模块,用于在所述第一判断模块的判断结果为否时,调用内置优化接
口,确定所述任务的实际输入数据量;
第二判断模块,用于判断所述任务所在集群的组的当前限额使用率是否超
过预设阈值;
第三判断模块,用于在所述第二判断模块的判断结果为没有超过时,判断
所述确定模块所确定的实际输入数据量是否大于全表数据量;
处理模块,用于在所述第三判断模块的判断结果为大于时,根据所述确定
模块所确定的实际输入数据量,为所述任务分配资源,并执行所述任务。
与现有技术相比,本申请实施例所提出的技术方案具有以下有益效果:
通过应用本申请实施例所提出的技术方案,结合任务的实际输入数据量和
任务所在集群的组的当前限额使用率,对相应的资源进行适应性调整,从而,
实现了在大型计算集群中,对运行的任务进行个性化分配计算资源,保障任务
得到合理的资源,提高任务执行效率,保证计算集群的资源利用率,提升任务
并发度。
附图说明
图1为本申请实施例提供的一种任务处理方法的流程示意图;
图2为本申请实施例提供的一种具体应用场景下的任务处理方法的流程示
意图;
图3为本申请实施例提供的一种任务管理设备的结构示意图。
具体实施方式
如背景技术所述,现有的默认处理规则中,系统认为输入文件大小都是整
张表的大小,且一个map(映射)可以处理256M的数据,这种做法,没有考
虑到计算集群quota(配额)的使用率,没有考虑到任务实际读入的数据量,
没有充分利用任务的特点进行自适应分配计算资源,而本申请实施例所提出的
技术方案,则解决了这样的问题。
下面结合附图对本申请的技术方案进行清楚、完整的描述,显然,所描述
的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施
例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施
例,都属于本申请的保护范围。
参见图1所示,为本申请实施例提供的一种任务处理方法的流程示意图,
该方法包括以下步骤:
步骤S101、当任务管理设备接收到任务时,所述任务管理设备判断所述任
务的输入数据量是否已经被配置为全表数据量。
如果判断结果为否,则执行步骤S102;
如果判断结果为是,则执行步骤S106。
步骤S102、所述任务管理设备调用内置优化接口,确定所述任务的实际输
入数据量。
在具体的应用场景中,本步骤的实现过程可以具体如下:
首先,所述任务管理设备对所述任务进行SQL(一种用于访问和处理数据
库的标准的计算机语言)编译,并获取SQL编译之后的任务树。
然后,所述任务管理设备判断所述任务树是否为空。
如果为空,所述任务管理设备将所述全表数据量作为实际输入数据量。
如果不为空,所述任务管理设备对SQL编译之后的数据进行重解析,并
依据预设的数据量确定规则,根据重解析后的结果确定实际输入数据量。
其中,上述的实际输入数据量的确定过程具体包括:
所述任务管理设备对SQL编译之后的关键operator(运算符)进行重解析。
所述任务管理设备根据重解析后的结果确定以下四个变量:
每个物理表所需字段与全部字段占比a、map含有的distinct(去重)数量
b、udf(自定义函数)数量c以及mapjoin(映射关联)数量d。
所述任务管理设备根据所述四个变量,按照以下规则确定实际输入数据
量:
实际输入数据量=全表数据量×a+max(全表数据量×b,全表数据量×
I(c)×0.5,全表数据量×I(d)),
其中,当x>0时,I(x)=1,否则,I(x)=0;
max(x,y,z)表示x、y和z中的最大值。
需要说明的是,上述的处理过程以及具体的参数、规则等,均是本申请实
施例所给出的一种优选的示例,在保证技术效果的前提下,可以根据实际场景
需要进行调整,这样的变化并不会影响本申请的保护范围。
步骤S103、所述任务管理设备判断所述任务所在集群的组的当前限额使用
率是否超过预设阈值。
如果没有超过,则执行步骤S104;
如果超过,则执行步骤S105。
需要进行说明的是,在实际的应用场景中,预设阈值可以根据需要进行具
体数值的确定,参考实践数据,本申请实施例中可以优选的将该预设阈值设置
为50%,在实际应用中,在能够保证系统资源使用效率和业务执行效率的前提
下,具体阈值数值的变化,并不会影响本申请的保护范围。
步骤S104、所述任务管理设备判断所述实际输入数据量是否大于全表数据
量。
如果不大于,则执行步骤S105;
如果大于,则执行步骤S106。
步骤S105、所述任务管理设备根据所述实际输入数据量,为所述任务分配
资源,并执行所述任务。
步骤S106、所述任务管理设备根据所述全表数据量,为所述任务分配资源,
并执行所述任务。
与现有技术相比,本申请的上述实施例具有以下有益技术效果:
通过应用本申请实施例所提出的技术方案,结合任务的实际输入数据量和
任务所在集群的组的当前限额使用率,对相应的资源进行适应性调整,从而,
实现了在大型计算集群中,对运行的任务进行个性化分配计算资源,保障任务
得到合理的资源,提高任务执行效率,保证计算集群的资源利用率,提升任务
并发度。
下面结合具体的实施例,对本申请实施例所提出的技术方案进行详细的解
释说明。
如图2所示,为本申请实施例所提出的一种具体应用场景下的任务处理方
法的流程示意图,该方法具体包括以下步骤:
步骤S201、将该任务提交至系统,对该任务进行SQL解析。
步骤S202、判断该任务的输入数据量是否已经被手动设置为全表数据量。
如果已经手动设置,则执行步骤S207;
如果没有手动设置,则执行步骤S203。
步骤S203、调用内置的优化接口,重新计算实际输入数据量。
在实际的应用场景中,本步骤中的内置的优化接口的主要逻辑如下:
首先,取到SQL编译之后的任务树。
然后,判断任务树是否为空,如果为空,则使用全表数据量作为输入数据
量。
否则,则对编译后的关键operator进行重解析,确定如下四个变量:
每个物理表所需字段与全部字段占比,记为a;
map含有的distinct数量,记为b;
udf数量,记为c;
mapjoin数量,记为d。
最后,根据上述的a、b、c、d四个变量重新估算实际输入的数据量,相
应的处理公式如下:
基础预测值:全表数据量*a
加权预测值:max(全表数据量*b,全表数据量*I(c)*0.5,全表数据量*I(d)),
I(x)表示x>0为1,否则为0
最终,实际输入的数据量为:基础预测值+加权预测值。
计算完成后,进入步骤S204。
需要说明的是,上述的处理过程以及具体的参数、规则等,均是本申请实
施例所给出的一种优选的示例,在保证技术效果的前提下,可以根据实际场景
需要进行调整,这样的变化并不会影响本申请的保护范围。
步骤S204、判断该任务所在集群的group(组)的quota实时使用率是否
超过50%。
如果超过50%,则进入步骤S206。
如果不超过50%,则进一步执行步骤S205。
步骤S205、判断计算得到的实际输入数据量是否大于全表数据量。
如果计算得到的实际输入数据量不大于全表数据量,则进入步骤S206;
如果计算得到的实际输入数据量大于全表数据量,则进入步骤S207。
步骤S206、根据计算得到的实际输入数据量,重新估算该任务所需的计算
资源,并提交此任务至离线MR(Map Reduce,映射归约)系统进行SQL执行。
步骤S207、使用全表数据量作为输入数据量,确定该任务所需的计算资源,
并提交此任务至离线MR系统进行SQL执行。
与现有技术相比,本申请的上述实施例具有以下有益技术效果:
通过应用本申请实施例所提出的技术方案,结合任务的实际输入数据量和
任务所在集群的组的当前限额使用率,对相应的资源进行适应性调整,从而,
实现了在大型计算集群中,对运行的任务进行个性化分配计算资源,保障任务
得到合理的资源,提高任务执行效率,保证计算集群的资源利用率,提升任务
并发度。
如图3所示,为本申请实施例所提出的一种任务管理设备的结构示意图,
该设备具体包括:
接收模块31,用于接收任务;
第一判断模块32,用于判断所述接收模块31所接收到的任务的输入数据
量是否已经被配置为全表数据量;
确定模块33,用于在所述第一判断模块32的判断结果为否时,调用内置
优化接口,确定所述任务的实际输入数据量;
第二判断模块34,用于判断所述任务所在集群的组的当前限额使用率是否
超过预设阈值;
第三判断模块35,用于在所述第二判断模块34的判断结果为没有超过时,
判断所述确定模块33所确定的实际输入数据量是否大于全表数据量;
处理模块36,用于在所述第三判断模块35的判断结果为大于时,根据所
述全表数据量,为所述任务分配资源,并执行所述任务。
进一步的,所述处理模块36,还用于:
在所述第一判断模块32的判断结果为是时,根据所述全表数据量,为所
述任务分配资源,并执行所述任务;
在所述第二判断模块34的判断结果为超过时,根据所述确定模块33所确
定的实际输入数据量,为所述任务分配资源,并执行所述任务;
在所述第三判断模块35的判断结果为不大于时,根据所述确定模块33所
确定的实际输入数据量,为所述任务分配资源,并执行所述任务。
需要进行说明的是,在实际的应用场景中,预设阈值可以根据需要进行具
体数值的确定,参考实践数据,本申请实施例中可以优选的将该预设阈值设置
为50%,在实际应用中,在能够保证系统资源使用效率和业务执行效率的前提
下,具体阈值数值的变化,并不会影响本申请的保护范围。
优选的,所述确定模块33,具体用于:
对所述接收模块31所接收到的任务进行SQL编译,并获取SQL编译之后
的任务树;
判断所述任务树是否为空;
如果为空,将所述全表数据量作为实际输入数据量;
如果不为空,对SQL编译之后的数据进行重解析,并依据预设的数据量
确定规则,根据重解析后的结果确定实际输入数据量。
具体的,所述确定模块33,具体用于:
对SQL编译之后的关键operator进行重解析;
根据重解析后的结果确定以下四个变量:
每个物理表所需字段与全部字段占比a、map含有的distinct数量b、udf
数量c以及mapjoin数量d;
根据所述四个变量,按照以下规则确定实际输入数据量:
实际输入数据量=全表数据量×a+max(全表数据量×b,全表数据量×
I(c)×0.5,全表数据量×I(d)),
其中,当x>0时,I(x)=1,否则,I(x)=0;
max(x,y,z)表示x、y和z中的最大值。
与现有技术相比,本申请的上述实施例具有以下有益技术效果:
通过应用本申请实施例所提出的技术方案,结合任务的实际输入数据量和
任务所在集群的组的当前限额使用率,对相应的资源进行适应性调整,从而,
实现了在大型计算集群中,对运行的任务进行个性化分配计算资源,保障任务
得到合理的资源,提高任务执行效率,保证计算集群的资源利用率,提升任务
并发度。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请
可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很
多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上
或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机
软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以
是手机,个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述
的方法。
本领域技术人员可以理解,实施例中的装置中的模块可以按照实施例描述
进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个
或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成
多个子模块。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通
技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,
这些改进和润饰也应视本申请的保护范围。