一种大数据平台SQL任务执行引擎智能自动切换的方法与流程

文档序号:27394991发布日期:2021-11-15 22:49阅读:226来源:国知局
一种大数据平台SQL任务执行引擎智能自动切换的方法与流程
一种大数据平台sql任务执行引擎智能自动切换的方法
技术领域
1.本发明涉及大数据处理技术领域,具体是指一种大数据平台sql任务执行引擎智能自动切换的方法。


背景技术:

2.在大数据平台的数据计算使用过程中,计算任务管理的重要内容是:为支持各种各样的数据展示,业务开发人员使用各种开发方式生成计算任务进行数据统计,支撑着各个业务数据分析及图表数据的收集及存储。在这种趋势背景下,使用sql语句作为计算任务的开发标准会让开发人员和分析人员更容易接受,学习成本小与入门门槛低,并且很容易对数据指标进行计算逻辑表达。在大数据环境下,各个执行引擎会根据自己的存储属性在sql标准上做一些自己的特有改进。所以计算任务开发过程中,开发人员往往会选择使用程序语言去编写针对特定执行引擎的任务程序包,然后提交给大数据集群中的执行引擎去执行。但是,这种方式不但增加开发门槛和学习成本,而且加大集群计算的不平衡性,只能通过不断增加服务器硬件资源去分担执行引擎的计算调用,但是这又会使其它执行引擎得不到合理的分配,导致资源浪费。


技术实现要素:

3.本发明的目的在于解决上述问题,提供一种能够节约计算资源成本并降低开发人员的开发成本及学习成本的大数据平台sql任务执行引擎智能自动切换的方法。
4.本发明的目的通过下述技术方案实现:一种大数据平台sql任务执行引擎智能自动切换的方法,包括以下步骤:
5.步骤1:获取原始sql语句和执行参数信息;其中,执行参数信息包括是否有指定执行引擎、是否设置为sql任务分配的cpu个数及内存资源;
6.步骤2:根据执行参数信息和原始sql语句,计算决策出当前sql任务适合的执行引擎及资源配置数据;
7.步骤3:根据执行引擎类型确认预先设计制作好的引擎落地执行程序包;
8.步骤4:将确认好的引擎落地执行程序包提交给确定好的执行引擎去执行,同时,将执行状态数据及占用的资源情况上报给服务器进行数据统计使用;
9.步骤5:sql任务执行完成后,将任务的完成状态上报给服务器中进行业务终止数据统计及资源释放数据统计;
10.步骤6:用户通过前端页面展示查看返回任务执行结果及任务运行状态。
11.步骤2中计算决策出当前sql任务适合的执行引擎及资源配置数据包括以下步骤:
12.s1:根据执行参数信息判定是否已指定执行引擎;是,以指定的执行引擎作为运行原始sql语句的执行引擎;否,执行步骤s2;
13.s2:获取当前大数据集群的各执行引擎的当前任务个数和空闲资源以及所有服务器的公共空闲资源;
14.s3:根据步骤s2中获取到的数据,选择出最优的执行引擎;
15.s4:通过sql解析器解析出原始sql语句的函数列表;
16.s5:判定函数列表中是否有函数需要改造:是,统计需改造函数,并生成待改造函数列表,执行步骤s6;否,则不对原始sql语句进行改造,直接输出选择好的执行引擎和原始sql语句;
17.s6:根据预先设置好的引擎函数实现方式对待改造函数列表里的函数进行改造,得到改造sql语句;
18.s7:输出选择好的执行引擎类型、改造sql语句以及资源占用参数。
19.所述步骤s2中获取的空闲资源包括cpu与内存资源中的空闲资源。
20.步骤s2中通过大数据计算资源模型来获取当前大数据集群的各执行引擎的当前任务个数和空闲资源以及所有服务器的公共空闲资源。
21.所述大数据计算资源模型包括数据层、收集层、统计计算层以及数据输出层;其中,
22.数据层,用于将每个sql任务开始时运行的资源占用数据、每个sql任务结束后归还的资源数据以及服务器总体资源数据上报到收集层中;
23.收集层,用于将收集到的数据分别按执行引擎进行数据归类整理,分别对收集服务器资源的占用、空闲情况、任务上报时的执行引擎类型、占用资源信息、任务的运行状态信息进行分字段整理归类集合存放于内存中;
24.统计计算层,用于统计各项资源数据;包括统计各执行引擎的占用资源、各引擎使用的时长与频次、服务器总体剩下的资源;
25.数据输出层,用于将统计的各项资源数据写入数据库,以便提供给第三方页面展示用;其还用于将统计的各项资源数据写入缓存,以便后续智能切换计算使用。
26.步骤s3中选择出最优的执行引擎的方法如下:
27.方法a:如果所有的引擎都无历史任务执行的情况下,资源都满足的情况下,则在预先设定的业界公认最适合的引擎排名列表中,选择排名最高的引擎作为当前sql任务的执行引擎。
28.方法b:如果所有的引擎都没有执行过历史任务,并且当前sql任务没有指定资源占用情况,则按预先设定的以资源要求高低来排名的引擎排名列表中选择最低资源要求配置的引擎来作为当前sql任务的执行引擎;如果当前sql任务指定了资源占用参数,在所有引擎都满足服务器的空闲资源的情况下,按排名高低选择排名最高的引擎作为当前sql任务的执行引擎,而在所有引擎都不满足服务器的空闲资源的情况下,则选择排名最中间的引擎作为当前sql任务的执行引擎。
29.方法c:如果有部分引擎有过历史任务,则选出所有还没有执行过任务的引擎,并参照预先设定的业界公认最适合的引擎排名列表和预先设定的以资源要求高低来排名的引擎排名列表,将没有执行过任务的引擎按资源情况进行排名,满足排名最高的引擎作为当前sql任务的执行引擎;当资源不满足引擎时,则按照上述b中的方法进行选择。
30.方法d:当所有引擎都有过执行任务的情况下,统计各引擎任务单位时间内的执行个数及执行时资源占用情况对比,排列出一个效率由高到低的引擎排名,并计算各引擎的策略值,选择策略值最小的引擎作为sql任务的执行引擎;当出现策略值相同时,则根据预
设的最优化引擎排名值最高的引擎作为执行引擎;其中,策略值的计算公式为:cvalue=(abs(pcpu

etaskavgcpu)+abs(pmem

etaskavgmem))/2;cvalue为策略值,abs为绝对值函数,pcpu为当前集群中服务器的空闲cpu资源数,pmem为当前集群中服务器的空闲内存资源数,etaskavgcpu为执行引擎单位时间内任务执行的平均cpu资源数,etaskavgmem为执行引擎单位时间内任务执行占用的平均内存大小。
31.步骤4之前还包括对确认好的引擎落地执行程序包进行整合,具体包括以下步骤:
[0032]ⅰ、将步骤2中确定的sql语句和资源配置数据组装起来作为引擎落地执行程序包的参数,并将参数分配为命令行参数和程序内集群资源分配参数两种调用模式;
[0033]ⅱ、根据确定的执行引擎类型,获取预先设置好的获取地址,拉取到最新版本的执行文件包来解析引擎落地执行程序包的参数,并在启动执行文件包时,解析出资源参数来申请集群的资源,设置调用并行度。
[0034]
本发明与现有技术相比,具有以下优点及有益效果:
[0035]
(1)本发明提供统一的sql语句入口及语句检查,然后提交后端服务器,减少前端开发使用人员的使用门槛,去掉程序语言的学习与开发要求。
[0036]
(2)本发明提供统一的sql开发提交平台,整合大数据集群各个计算引擎的sql功能,去掉用户对各执行引擎的选择烦恼及性能分析,降低使用门槛及学习成本。
[0037]
(3)本发明提供各种大数据集群各任务执行运行时长,资源占用等指标策略,为sql任务的适合引擎运行提供优化选择,平衡各计算资源的使用率。
[0038]
(4)本发明提供统一分析各个执行引擎任务单位时长运行的个数与时长,资源占用情况等分析,为大数据集群的各执行引擎资源的扩容与缩容提供参与依据和优化方向。
附图说明
[0039]
图1为本发明的整体步骤流程图。
[0040]
图2为本发明中计算决策出当前sql任务适合的执行引擎及资源配置数据的步骤流程图。
具体实施方式
[0041]
下面结合实施例对本发明作进一步的详细说明,但本发明的实施方式不限于此。
[0042]
实施例
[0043]
如图1、2所示,本发明的大数据平台sql任务执行引擎智能自动切换的方法,包括以下步骤:
[0044]
步骤1:获取原始sql语句和执行参数信息;即前端开发使用人员将原始sql语句和执行参数信息一起提交给后端服务器。其中,执行参数信息包括是否有指定运行原始sql语句的执行引擎、是否设置为sql任务分配的cpu个数及内存资源。
[0045]
步骤2:后端服务器根据执行参数信息和原始sql语句,计算决策出当前sql任务适合的执行引擎及资源配置数据;其具体包括以下步骤:
[0046]
s1:根据执行参数信息判定是否已指定执行引擎;如果已经指定了运行原始sql语句的执行引擎,则以指定的执行引擎作为运行原始sql语句的执行引擎,此时原始sql语句不需要改造。如果没有指定运行原始sql语句的执行引擎,则执行下面的步骤s2。
[0047]
s2:没有指定运行原始sql语句的执行引擎时,则进入到智能选择模式来选择执行引擎。选择前,首先需要知道当前大数据集群中有多少总资源及各个执行引擎,同时需要收集任务上报的消耗资源及运行时长,给出下一个将要执行的任务的所需执行调度依据的数据及任务执行的最优化执行引擎选择策略数据。因此,这里需要通过大数据计算资源模型来获取当前大数据集群的各执行引擎的当前任务个数和空闲资源以及所有服务器的公共空闲资源。其中,空闲资源包括cpu与内存资源中的空闲资源。服务器的公共空闲资源是指非专注计算那部分的空闲资源,例如,服务器可以给专注于计算的引擎使用,也可以给专注于存储的引擎使用,那么这里获取的则是专注于存储的引擎使用的空闲资源。
[0048]
具体的,所述大数据计算资源模型包括数据层、收集层、统计计算层以及数据输出层,设计设置上述架构来处理对集群环境指标的收集,用来支持sql任务的智能引擎切换的重要依据。
[0049]
其中,数据层用于将每一个任务在执行的开始与结束阶段主动将资源占用情况上报汇入到收集层;同时大数据集群的所有服务器会提前设定间隔一定时间上报一次当前服务器总体资源数据,数据层也将服务器总体资源数据上报到收集层中。服务器总体资源数据包括服务器的cpu与内存总体信息、当前正在使用的cpu与内存信息、剩余的cpu与内存信息。
[0050]
为了追求更实时,更好的反馈资源情况,可以将上报时间间隔设置到秒级或者更精确的毫秒级,同时上报的数据包含执行引擎类型,cpu,内存及时间等数据。服务器的资源数据应该包含服务器资源的类型,分为执行引擎专属和混合公共使用两种。
[0051]
收集层用于将收集到的数据分别按执行引擎进行数据归类整理,分别对收集服务器资源的占用、空闲情况、任务上报时的执行引擎类型、占用资源信息、任务的运行状态信息进行分字段整理归类集合存放于内存中。
[0052]
统计计算层用于统计各项资源数据,统计计算层统计的各项资源数据可以用来为后续的sql任务执行提供引擎选择策略执行的重要依据,并且是一个实时的任务计算,保持长期运行,随时更新当前大数据集群的资源的最新使用情况;也可以用来做一些任务资源分析及资源利用告警使用之需,为后续资源紧张或者富足时做扩容与缩容提供重要指标。
[0053]
其中,统计的各项资源数据包括统计各执行引擎的占用资源、各引擎使用的时长与频次、服务器总体剩下的资源。各执行引擎的占用资源是指各引擎当前正在运行任务的个数和执行引擎空闲的资源信息。统计各引擎使用的时长与频次可以通过对任务执行的时长与单位时长内运行任务的个数做数据统计,为支持各执行引擎在单位时长内能最佳容入的任务个数提供评判选择。统计服务器总体剩下的资源是指统计当前集群中所有公共资源的空闲资源数据。
[0054]
数据输出层,用于将统计的各项资源数据写入数据库,以便提供给第三方页面展示用;其还用于将统计的各项资源数据写入缓存,以便后续智能切换计算使用;做到与其它业务逻辑解耦合,相互之间的运算资源不受影响。
[0055]
s3:根据步骤s2中获取到的数据,选择出最优的执行引擎。选择时根据不同情况采用不同的选择策略,具体方法如下:
[0056]
方法a:如果所有的引擎都无历史任务执行的情况下,资源都满足的情况下,则在预先设定的业界公认最适合的引擎排名列表中,选择排名最高的引擎作为当前sql任务的
执行引擎。
[0057]
方法b:如果所有的引擎都没有执行过历史任务,并且当前sql任务没有指定资源占用情况,则按预先设定的以资源要求高低来排名的引擎排名列表中选择最低资源要求配置的引擎来作为当前sql任务的执行引擎;如果当前sql任务指定了资源占用参数,在所有引擎都满足服务器的空闲资源的情况下,按排名高低选择排名最高的引擎作为当前sql任务的执行引擎,而在所有引擎都不满足服务器的空闲资源的情况下,则选择排名最中间的引擎作为当前sql任务的执行引擎。
[0058]
例如:集群中有hive、impala以及spark计算集群,那么排名情况是impala>spark>hive。因为impala的计算资源要求比较高,速度快,而且spark可以提高并行度及程序支持,速度比hive快,当计算资源三个都不满足时,这时选择spark让计算资源分散;当资源足够时选择impala来做计算;资源更低只满足hive时,则选择hive作计算引擎。
[0059]
方法c:如果有部分引擎有过历史任务,则选出所有还没有执行过任务的引擎,并参照预先设定的业界公认最适合的引擎排名列表和预先设定的以资源要求高低来排名的引擎排名列表,将没有执行过任务的引擎按资源情况进行排名,满足排名最高的引擎作为当前sql任务的执行引擎;当资源不满足引擎时,则按照上述b中的方法进行选择。
[0060]
方法d:当所有引擎都有过执行任务的情况下,统计各引擎任务单位时间内的执行个数及执行时资源占用情况对比,排列出一个效率由高到低的引擎排名,并计算各引擎的策略值,选择策略值最小的引擎作为sql任务的执行引擎;当出现策略值相同时,则根据预设的最优化引擎排名值最高的引擎作为执行引擎。其中,策略值的计算公式为:cvalue=(abs(pcpu

etaskavgcpu)+
[0061]
abs(pmem

etaskavgmem))/2;cvalue为策略值,abs为绝对值函数,pcpu为当前集群中服务器的空闲cpu资源数,pmem为当前集群中服务器的空闲内存资源数,etaskavgcpu为执行引擎单位时间内任务执行的平均cpu资源数,etaskavgmem为执行引擎单位时间内任务执行占用的平均内存大小。
[0062]
例如:假设集群中有hive、impala以及spark三个集群,预先设置的最优引擎排名为spark>impala>hive,在最近的1个小时内执行的任务个数与计算资源情况如下表所示:
[0063]
引擎hiveimpalaspark单位时间最近1小时最近1小时最近1小时执行任务个数100015002000平均cpu资源数1105平均内存大小1g2g5g
[0064]
备注:上表所列数据并非是真实的运行环境数据,只是为计算数据规则作数据展示。
[0065]
如当前资源只空闲有8个cpu,内存空闲4g,那么各引擎的策略值是:
[0066]
hive:(abs(8

1)+abs(4

1))/2=5;
[0067]
impala:(abs(8

10)+abs(4

2))/2=2;
[0068]
spark:(abs(8

5)+abs(4

5))/2=2;
[0069]
根据策略要求下,策略值排序为impala、spark、hive,由于impala与spark值相同,
则再从预先的最优化排名来选择,最终选择的结果是使用spark引擎来执行当前的sql任务。
[0070]
上述方法a~d为不同情况下引擎选择的策略,其中方法a为所有引擎都没有跑过任务,且资源都满足的情况下的引擎选择策略。方法b为所有引擎都没有跑过任务,且资源有可能不足的情况下的引擎选择策略。方法c为所有引擎中只有部分引擎有过历史任务的情况下的引擎选择策略。方法d为所有引擎都有过历史任务的情况下的引擎选择策略。
[0071]
s4:确定执行引擎后,通过sql解析器解析出原始sql语句的函数列表。
[0072]
s5:将函数列表与预先存储在数据库表中的引擎所对应包含的函数做比较,确定函数列表中是否有需要改造的函数:如果有需要改造的函数,则统计需要改造函数,并生成待改造函数列表,执行步骤s6。如果没有需要改造的函数,则不对原始sql语句进行改造,直接输出选择好的执行引擎和原始sql语句。
[0073]
函数列表中每一个元素包含有函数名字、参数列表、函数类型,如遇到待改造函数没有找到实现目标函数的情况下,会给开发人员报送函数未找到的信息,让开发人员选择具体的报告引擎执行当前sql任务,同时此函数将记录到数据库中,后续会对此函数做相应的执行引擎支持。另外,sql解析器也会针对sql语句进行检查,并判定是否符合公认的sql标准,不合格的sql语句将提示开发使用人员sql的错误。
[0074]
s6:根据预先设置好的引擎函数实现方式对待改造函数列表里的函数进行改造,得到改造sql语句。预先设置好的引擎函数实现方式为如类型转换函数,日期时间函数的引擎转化,字符串中的json数据解析函数转化等按引擎的规则预先实现这部分的函数逻辑,并且封装到预先制作好的落地执行包中,使之可以用于sql语句的改造和任务执行支持。
[0075]
s7:输出选择好的执行引擎类型、改造sql语句以及资源占用参数。如果当前sql任务指定执行资源大小,执行任务将以开发使用人员自定义的数据来占用大数据集群资源;但如果没有指定执行资源情况则按预先设置引擎最低资源情况来分配集群资源。
[0076]
步骤3:获取到执行引擎及资源配置数据后,根据执行引擎类型确认预先设计制作好的引擎落地执行程序包。此落地执行程序包在集群中调度执行时对封装参数进行解析,并将sql语句通过执行参数传入程序包中,同时在引擎计算资源集群中申请程序执行包所需要的计算资源,此资源由程序包通过参数解析封装到执行的逻辑设置中。
[0077]
另外,由于落地程序包是预发针对各个引擎的sql特性编写的执行包,大数据引擎如spark、flink之类的计算引擎是支持使用程序包进行业务提交。如hive、impala之类则不支持程序的引擎,这就需要独立开发程序包进行jdbc方式的连接提交sql语句并返回结果,因此,作为另一种优选方案,在执行步骤4之前还包括对确认好的引擎落地执行程序包进行整合,具体包括以下步骤:
[0078]ⅰ、将步骤2中确定的sql语句和资源配置数据组装起来作为引擎落地执行程序包的参数,并将参数分配为命令行参数和程序内集群资源分配参数两种调用模式;
[0079]ⅱ、根据确定的执行引擎类型,获取预先设置好的获取地址,拉取到最新版本的执行文件包来解析引擎落地执行程序包的参数,并在启动执行文件包时,解析出资源参数来申请集群的资源,设置调用并行度。
[0080]
sql语句的执行引擎选定及函数改造完成后,接下来就是执行sql任务,根据各个引擎资源的要求不同,后端预先针对不同的执行引擎开发对应落地执行程序包来为集群中
的执行引擎提交sql任务支持,并同步提交上报执行引擎分配的cpu资源与内存资源。
[0081]
步骤4:将确认好的引擎落地执行程序包提交给确定好的执行引擎去执行,同时,将执行状态数据及占用的资源情况上报给服务器进行数据统计使用。
[0082]
当执行引擎不是支持文件程序包执行,只提供查询服务时,如:hive和impala,则落地执行包将以一个单独的命令行程序运行,使用原生服务或者jdbc模式向数据引擎发起查询服务以完成sql任务逻辑。若引擎支持程序包运行时,则提交给集群的执行引擎去运行程序包及配置封装好的资源与sql语句参数。
[0083]
步骤5:sql任务执行完成后,将任务的完成状态上报给服务器中进行业务终止数据统计及资源释放数据统计。即将任务的完成状态数据上报给大数据计算资源模型中进行业务终止数据统计及资源释放数据统计。
[0084]
步骤6:用户通过前端页面展示查看返回任务执行结果及任务运行状态。
[0085]
本发明提供一个统一的sql编辑入口,用户编写sql语句传递给后端服务器,后端服务器根据业务的类型与数量,集群运行环境,资源分配情况进行综合分析建模;统计具体任务运行的时段,占用资源的比例,动态调整计算资源数据来决策当前sql语句由大数据集群中某个执行引擎来执行,以优化业务的执行,达到资源的最大合理化分配调度,节约计算资源成本并降低开发人员的开发成本及学习成本,转而将更多的精力投入于数据业务的展示及报表的开发等方向。
[0086]
如上所述,便可很好的实现本发明。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1