一种基于SparkSQL的聚合计算优化方法技术

技术编号:32240437 阅读:14 留言:0更新日期:2022-02-09 17:44
本发明专利技术公开了一种基于Spark SQL的聚合计算优化方法,包括如下步骤:S1、通过原生Spark SQL提供的规则扩展接口,进行执行计划阶段的重新编排;S2、使用基于块数据模型实现的BlockSortedAggregateExec和BlockHashAggregateExec执行计划;S3、进行执行计划匹配,匹配是否有聚合统计节点,若没有匹配规则,则聚合优化规则结束;若匹配到聚合执行计划,则会提取聚合计算节点类型,并判断其为哪种聚合节点;S4、若是基于Hash的聚合节点,则将Spark SQL原生的HashAggregateExec执行计划替换为BlockHashAggregateExec,聚合优化规则结束;若是基于Sort的聚合节点,则将Spark SQL原生的SortedAggregateExec执行计划替换为BlockSortedAggregateExec,聚合优化规则结束。通过对原生Spark SQL的逻辑执行计划的规则匹配,重新实现聚合计算逻辑的编排,并重新实现基于“块”数据的聚合计算执行计划。数据的聚合计算执行计划。数据的聚合计算执行计划。

【技术实现步骤摘要】
一种基于Spark SQL的聚合计算优化方法


[0001]本专利技术涉及大数据、数据库
,具体为一种基于Spark SQL的聚合计算优化方法。

技术介绍

[0002]Spark SQL提供了高效的聚合计算框架,可针对海量数据提供通用的聚合计算能力,目前Spark聚合计算执行计划主要有HashAggregateExec、SortAggregateExec和ObjectHashAggregateExec三种。
[0003]基于Hash的HashAggregateExec,该执行计划内置了Map类型的数据结构,以分组的属性作为key,将数据保存到该Map中并进行聚合计算。HashAggregateExec执行计划可能会内存不足的情况会退化为SortAggregateExec的执行逻辑。Hash聚合计算的逻辑如说明书附图中的图1所示,如果当前Hash聚合计算对数据分布存在要求,则原生Spark SQL执行计划会按照SQL要求进行局部计算,再进行数据Shuffle,最后进行数据的最终聚合计算。其计算流程如说明书附图中的图2所示。分布式Hash聚合计算本质是一种通用的MapReduce架构,图2中的Stage0阶段作为Map阶段,主要进行数据的读取,过滤,在条件允许的情况下进行Map内的局部聚合操作,可以进行局部聚合计算依赖于聚合算子和数据分布情况。完成局部计算和数据重分区后,需要通过Exchange执行计划进行数据的Shuffle,数据的Shuffle会将计算结果数据和计算结果的索引数据溢写到磁盘上,最终完成Map阶段的任务。Stage1阶段为Reduce阶段,主要是读取Stage0阶段生成好的数据,并进行最终的聚合计算。
[0004]基于排序的SortAggregateExec,该执行计划是一种基于排序的聚合实现,在进行聚合计算之前,会根据分组的key进行分区并在分区内对数据排序,排序的时如果内存空间不足,需要将排序结果溢写磁盘。Sorted聚合计算的逻辑如明书附图中的图3所示。基于排序的SortAggregateExec和基于hash的聚合计算基本流程类似,原生Spark SQL在执行计划生成阶段引入了SortExec执行计划,其计算流程如明书附图中的图4所示,图中的Stage0阶段作为Map阶段,主要进行数据的读取,过滤,并对读取的数据按照分组键进行排序,在条件允许的情况下进行Map内的局部聚合操作,是否可以进行局部聚合计算依赖于聚合算子和数据分布情况。完成局部计算和数据重分区后,需要通过Exchange执行计划进行数据的Shuffle,数据的Shuffle会将计算结果数据和计算结果的索引数据溢写到磁盘上,最终完成Map阶段的任务。Stage1阶段为Reduce阶段,主要是读取Stage0阶段生成好的数据,并按照数据分区情况对各Executor节点的数据再次进行排序,最后在进行最终的聚合计算。
[0005]上述方式在实际运用时,常存在以下两点不足:
[0006]1、无法避免对已排序数据的再次排序操作
[0007]Spark SQL中的SortAggregateExec执行计划或者HashAggregateExec执行计划在内存不足的情况下在退化为基于排序的聚合执行计划时都无法避免对已经有序的数据进行再次排序的问题,该问题导致整个执行计划进行重复的排序操作,浪费了计算资源。
[0008]2、无法避免对已排序数据的shuffle操作
[0009]Spark SQL中HashAggregateExec、SortAggregateExec执行计划在Repartition情况下会引入Exchange执行计划,该执行计划主要进行数据的Shuffle操作。对于已经排好序的数据,如果其分布均处于一个Executor中,则可以避免Shuffle操作。Shuffle操作会产生大量的临时文件,对磁盘、网络、CPU均有消耗,也会拖慢整个作业的运行时间。

技术实现思路

[0010]为了解决上述技术问题,本专利技术提供了如下的技术方案:
[0011]本专利技术的目的在于基于“块”数据的存储,在分组条件中携带了“块”数据聚集键的情况下,借助索引数据,尽可以避免数据的排序、Shuffle等操作,实现Spark SQL在该类场景下聚合计算性能的提升。一种基于Spark SQL的聚合计算优化方法,包括如下步骤:
[0012]S1、通过原生Spark SQL提供的规则扩展接口,进行执行计划阶段的重新编排;
[0013]S2、使用基于块数据模型实现的BlockSortedAggregateExec和BlockHashAggregateExec执行计划;
[0014]S3、进行执行计划匹配,匹配是否有聚合统计节点,若没有匹配规则,则聚合优化规则结束;若匹配到聚合执行计划,则会提取聚合计算节点类型,并判断其为哪种聚合节点;
[0015]S4、若是基于Hash的聚合节点,则将Spark SQL原生的HashAggregateExec执行计划替换为BlockHashAggregateExec,聚合优化规则结束;若是基于Sort的聚合节点,则将Spark SQL原生的SortedAggregateExec执行计划替换为BlockSortedAggregateExec,聚合优化规则结束。
[0016]作为本专利技术的一种优选技术方案,所述S2中的块数据模型中的块模型是指按照数据的真实物理含义、数据的关联关系,将数据聚集、连续存储,形成数据块。
[0017]作为本专利技术的一种优选技术方案,所述S2中的块数据模型实现的执行计划,会借助块数据的索引信息和块数据的聚集键分布信息,保证聚合计算中每个Map任务中的分组数据是全局“唯一”的。
[0018]作为本专利技术的一种优选技术方案,在执行计划生成时,若计算过程对数据分布有要求,Spark SQL会在Map端和Reduce端均进行计算,采用块数据聚合,在执行计划构建时会基于数据避免Reduce端的最终聚合计算,减少了Reduce任务的执行的计算开销。
[0019]本专利技术的有益效果是:
[0020]1、在分组条件中存在块数据聚集键的情况下,可避免数据Shuffle,在分组条件中存在聚集键的情况下,避免了Shuffle开销,加快了分析作业的计算效率;
[0021]2、在分组条件中存在块数据聚集键的情况下,可避免数据排序和部分聚集计算,在分组条件中存在聚集键的情况下,避免了数据基于分组键的排序,同时在数据不进行Shuffle操作的同时避免了Reduce端的计算。
附图说明
[0022]附图用来提供对本专利技术的进一步理解,并且构成说明书的一部分,与本专利技术的实施例一起用于解释本专利技术,并不构成对本专利技术的限制。在附图中:
[0023]图1是现有技术中的Hash聚合计算示意图;
[0024]图2是现有技术中的Hash分布式聚合计算示意图;
[0025]图3是现有技术中的Sort聚合计算示意图;...

【技术保护点】

【技术特征摘要】
1.一种基于Spark SQL的聚合计算优化方法,其特征在于,包括如下步骤:S1、通过原生Spark SQL提供的规则扩展接口,进行执行计划阶段的重新编排;S2、使用基于块数据模型实现的BlockSortedAggregateExec和BlockHashAggregateExec执行计划;S3、进行执行计划匹配,匹配是否有聚合统计节点,若没有匹配规则,则聚合优化规则结束;若匹配到聚合执行计划,则会提取聚合计算节点类型,并判断其为哪种聚合节点;S4、若是基于Hash的聚合节点,则将Spark SQL原生的HashAggregateExec执行计划替换为BlockHashAggregateExec,聚合优化规则结束;若是基于Sort的聚合节点,则将Spark SQL原生的SortedAggregateExec执行计划替换为BlockSortedAggrega...

【专利技术属性】
技术研发人员:廖闻剑赵智峰李岩苏锋周涛丁军峰
申请(专利权)人:西安烽火软件科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1