一种基于分区聚集键的SparkSQL分布式位图连接计算优化方法技术

技术编号:36684176 阅读:9 留言:0更新日期:2023-02-27 19:44
本发明专利技术提供一种基于分区聚集键的Spark SQL分布式位图连接计算优化方法,通过检查连接计算字段是否可以映射为聚集键,选择可以映射的连接计算字段进行优化,然后根据运行时统计信息确认参与运算的大小表情况,接着对小表数据进行聚集键映射,明确小表中的该条数据属于哪个分区,最后根据小表分区情况,生成基于小表的分布式位图数据,并存储至分布式文件系统,基于可映射出分区聚集键的场景下,使用位图技术实现程序运行时生成分区过滤器,并将过滤器作为过滤条件下推,尽可能避免无关数据参与计算,减少连接计算时的数据量,实现Spark SQL在该类场景下连接计算性能的提升。SQL在该类场景下连接计算性能的提升。SQL在该类场景下连接计算性能的提升。

【技术实现步骤摘要】
一种基于分区聚集键的Spark SQL分布式位图连接计算优化方法


[0001]本专利技术属于数据计算
,更具体地说是一种基于分区聚集键的Spark SQL分布式位图连接计算优化方法。

技术介绍

[0002]Spark是专为大规模数据处理而设计的快速通用的计算引擎,其中Spark SQL是Spark用于结构化数据处理的一个模块;Spark SQL提供了高效的计算框架,可针对海量数据提供通用的连接计算能力,包括:Shuffled Hash Join Exec、Sort Merge Join Exec等。
[0003]基于重分区数据的Shuffled Hash Join Exec,该执行计划的条件较为苛刻,该计划首先对两张表分别按照关联计算的列信息(Join Key)进行重新分区,即Shuffle操作,将相同的key数据放置在同一分区。其次,对每个分区中的数据进行关联操作,此时将小表分区构建为一张Hash表,然后根据大表分区中记录的key值进行匹配;
[0004]基于排序的Sort Merge Join Exec,该执行计划是一种基于排序的连接计算实现,在进行连接计算之前,会根据分组的key进行分区并在分区内对数据排序,排序时如果内存空间不足,需要将排序结果溢写磁盘。
[0005]上述技术虽然能够实现数据的连接计算,但是仍存在以下不足:
[0006]1、Spark SQL进行全表扫描,并且不带分区条件进行关联计算时,如果连接计算字段可以映射出分区键,此时Spark SQL依然会进行全表数据扫描操作,不会做分区裁剪,导致大量无用的分区数据被读取,增加无效数据的出库与计算,消耗了IO与计算资源;
[0007]2、在进行分区数据过滤时,由于Spark SQL无法预先知道该条数据是否需要参与运算,所以会有非必要的数据参与Shuffle操作,在分布式计算时Shuffle会带来较大的计算开销。

技术实现思路

[0008]为了解决上述技术问题,本专利技术提供一种基于分区聚集键的Spark SQL分布式位图连接计算优化方法,通过位图(RoaringBitmap)技术实现程序运行时生成分区过滤器,减少无关数据参与计算和连接计算时的数据量,以解决对基于聚集键分区的数据无法进行细粒度数据过滤与分区裁剪等问题。
[0009]本专利技术具体的技术方案如下:
[0010]一种基于分区聚集键的Spark SQL分布式位图连接计算优化方法,所述分布式位图连接计算优化方法步骤如下:
[0011]S1:首先检查连接计算字段是否可以映射为聚集键,选择可以映射的连接计算字段进行优化,其中连接计算字段的判断依据为该连接字段无UDF函数,并且该字段为系统预先建立的索引字段;
[0012]S2:然后根据运行时统计信息确认参与运算的大小表情况;
[0013]S3:接着对小表数据进行聚集键映射,明确小表中的该条数据属于哪个分区;对数据进行聚集的字段,就是聚集键(ClusterKey),简称CK,通常我们选择标识类数据,如手机号,设备号等,随着时间的推移,这些标识类数据会持续积累数据。
[0014]S4:最后根据小表分区情况,生成基于小表的分布式位图数据,并存储至分布式文件系统。
[0015]优化的,步骤S1中,检查连接计算字段是否可以映射为聚集键,首先针对数据进行执行计划匹配,匹配是否有Join执行计划节点。
[0016]优化的,Join执行计划节点未匹配到,则该条执行计划结束,反之,匹配到Join执行计划节点,则进行Join条件的提取和解析。
[0017]优化的,Join条件提取和解析后,判断Join关联条件是否包含聚集键字段或者关联条件字段是否可以映射为聚集字段。
[0018]优化的,步骤S2中,根据步骤S1映射的连接计算字段条件符合,罗列数据并判断数据大小。
[0019]优化的,步骤S3中,通过列数据大小或者小表行数判断是否可以进行分布式位图优化,对小表中各数据进行分区。
[0020]优化的,步骤S4中,根据步骤S3中的小表数据映射完成后,并满足分布式位图优化要求,进行执行计划的新建。
[0021]优化的,构建新的执行计划主要包括两个执行计划的扩展,分别为Cluster Key Bitmap Exchange Exec与Cluster Key Bitmap Filter Exec。
[0022]优化的,Cluster Key Bitmap Exchange Exec主要是读取小表数据并将小表数据关联列数据映射为分区Bitmap,然后将Bitmap存储到分布式文件系统,并将分布式文件系统存储路径广播至Spark Executor节点。
[0023]优化的,Cluster Key Bitmap Filter Exec主要是依据广播的分布式文件系统上Bitmap存储路径根据分区进行数据过滤。
[0024]与现有技术相比,本专利技术具有如下有益效果:
[0025]1、本专利技术通过基于可映射出分区聚集键的场景下,使用位图(Roaring Bitmap)技术实现程序运行时生成分区过滤器,并将过滤器作为过滤条件下推,尽可能避免无关数据参与计算,减少连接计算时的数据量,实现Spark SQL在该类场景下连接计算性能的提升。
附图说明
[0026]图1是本专利技术分布式位图生成与过滤示意图;
[0027]图2是本专利技术基于聚集键的关联计算执行计划生成示意图;
[0028]图3是本专利技术分布式位图生成过程示意图;
[0029]图4是本专利技术分布式位图执行计算过程示意图;
[0030]图5是本专利技术基于分区聚集键的位图生成结果示例示意图。
具体实施方式
[0031]下面结合附图和实施例对本专利技术的实施方式作进一步详细描述。以下实施例用于说明本专利技术,但不能用来限制本专利技术的范围。
[0032]如图1

图5所示,本专利技术提供一种基于分区聚集键的Spark SQL分布式位图连接计算优化方法,通过基于可映射出分区聚集键的场景下,使用位图(Roaring Bitmap)技术实现程序运行时生成分区过滤器,并将过滤器作为过滤条件下推,尽可能避免无关数据参与计算,减少连接计算时的数据量,实现Spark SQL在该类场景下连接计算性能的提升。
[0033]第一步:
[0034]针对需要进行连接计算的数据进行执行计划匹配,匹配数据中是否有Join执行计划节点,如果未匹配到,则该条规则优化结束;如果匹配到执行计划,则会进行JOIN条件的提取与解析。
[0035]然后判断Join关联条件中检是否包含聚集键,或者关联条件字段是否可以映射为聚集字段,如果可以则进行优化,反之则不进行优化;其中对数据进行聚集的字段,就是聚集键,简称CK;通常我们选择标识类数据,如手机号,设备号等,随着时间的推移,这些标识类数据会持续积累数据。
[0036]当关联计算的关联条件(Join本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于分区聚集键的Spark SQL分布式位图连接计算优化方法,其特征在于,所述分布式位图连接计算优化方法步骤如下:S1:首先检查连接计算字段是否可以映射为聚集键,选择可以映射的连接计算字段进行优化;S2:然后根据运行时统计信息确认参与运算的大小表情况;S3:接着对小表数据进行聚集键映射,明确小表中的该条数据属于哪个分区;S4:最后根据小表分区情况,生成基于小表的分布式位图数据,并存储至分布式文件系统。2.如权利要求1所述基于分区聚集键的Spark SQL分布式位图连接计算优化方法,其特征在于:步骤S1中,检查连接计算字段是否可以映射为聚集键,首先针对数据进行执行计划匹配,匹配是否有Join执行计划节点。3.如权利要求2所述基于分区聚集键的Spark SQL分布式位图连接计算优化方法,其特征在于:Join执行计划节点未匹配到,则该条执行计划结束,反之,匹配到Join执行计划节点,则进行Join条件的提取和解析。4.如权利要求3所述基于分区聚集键的Spark SQL分布式位图连接计算优化方法,其特征在于:Join条件提取和解析后,判断Join关联条件是否包含聚集键字段或者关联条件字段是否可以映射为聚集字段。5.如权利要求1所述基于分区聚集键的Spark SQL分布式位图连接计算优化方法,其特征在于:步骤S2中,根据步骤S1映射的连接计算字段条件符合,罗列数据并判断数据大小。6.如权利要...

【专利技术属性】
技术研发人员:赵智峰李岩刘奕洋郑伟卢兴杨
申请(专利权)人:西安烽火软件科技有限公司
类型:发明
国别省市:

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

1