技术领域
本发明属于大数据计算领域,涉及一种基于Spark计算框架的大表连接优化方法,可用于解决智能电网、互联网、工业等领域的结构化数据倾斜问题,快速准确地进行大表连接。
背景技术
随着互联网、物联网、社交网络等不断融入人们的生活,我们已经进入到数据大爆炸时代,各类数据(如智能电网、互联网、工业等领域的数据)呈指数级增长,庞大的数据规模和复杂的数据关系对数据分析技术提出了新的挑战。海量数据在Spark大数据计算框架或大型数据库中基本都是以表的形式进行存储和计算,连接是数据处理中最频繁最基本的操作。在大数据环境下,数据表规模非常庞大,在传统的关系型数据库,如:Mysql,Oracle,DB2等处理连接操作十分耗时,因此对大表连接操作进行优化显得很有必要。
Spark能够全面兼容Hadoop分布式存储访问接口,利用分布式内存处理数据,大幅度提高大数据计算系统的性能。Spark SQL是Spark中处理结构化数据的模块,可以极大的降低数据分析难度,但是一旦数据表非常大,且进行连接操作时,会有大量的无效数据进入shuffle过程。而且在Spark SQL框架的shuffle过程中会将所有的中间数据视为key/value结构,Spark利用哈希算法将相同的key拉取到同一Task中,如果各个key相互之间的数据量相差较大,有多个key占有特别大的数据比例,那么就发生了数据倾斜,造成在Spark应用处理过程中无法充分利用系统的CPU和内存资源,作业时间会被大Task所拖长,甚至会造成内存溢出异常,导致作业无法运行。
发明内容
有鉴于此,本发明的目的在于提供一种适用于智能电网、互联网或工业等结构化数据的基于Spark计算框架的大表连接优化方法,提供两个大表在join操作时改进数据倾斜情况,解决连接耗时高的问题,进而解决节点内存溢出问题,缩短连接查询时间,提高用户满意度。
为达到上述目的,本发明提供如下技术方案:
一种基于Spark计算框架的大表连接优化方法,首先通过谓词下推策略结合压缩布隆过滤器对两表进行数据清洗,过滤掉两个表中大量的无用数据。数据清洗后再建立数据倾斜检测模型,当检测到数据倾斜之后,分割中间数据簇,平衡各个reduce节点中的数据量,改进数据倾斜情况,解决Spark节点在大表连接过程中出现内存溢出,耗时高的问题。
该方法具体包括以下步骤:
S1:利用谓词下推结合压缩布隆过滤器进行数据清洗,过滤掉大表中大量无效的数据,避免大量无用数据进入到shuffle阶段;
S2:搭建基于Spark的数据倾斜检测模型,通过蓄水池采样算法统计出全局Map阶段Key值分布;
S3:采用中间数据簇分割策略,对倾斜数据簇根据平均负载额定容量进行切割,使出现频次多的Key进入到其他处理快的分区中,使Key处于均匀分布状态。
进一步,所述步骤S1具体包括:首先SQL表达式的过滤表达式下推到存储层直接过滤数据,减少传输到计算曾的数据量,减少扫描无效数据列的同行其他列数据IO;再利用压缩Bloom Filter进行哈希映射,找到两个表中共同拥有的属性连接值并存储到新的位数组A和位数组B中,并利用压缩Bloom Filter进行网络广播位数组A和位数组B,将其他不参与连接阶段的无效数据进行去除。
进一步,所述步骤S1具体包括以下步骤:
S11:采用谓词下推策略,当Spark计算引擎解析出能被下推的filters后,Spark将他们传递给Parquet进行合并操作,并将合并操作放至叶子节点上使filters合并操作在数据源上执行,从而在数据源中真正的执行无效数据的过滤;
S12:将执行完步骤S11的左表和右表的连接属性放至两个新的RDD中,记为RDDA和RDDB;
S13:在Spark集群的每个节点内,分别依次读取RDDA和RDDB的属性连接值,并采用n组哈希函数对RDDA和RDDB中的属性连接值进行计算后放入布隆压缩过滤器中,生成位数组,直到所有节点中的连接属性都计算完毕;
S14:将步骤S13中处理后的每个节点内的RDDA和RDDB的位数组进行或操作,直至每个节点的位数组都处理完毕得到CBFA和CBFB,将CBFA和CBFB广播至Spark集群中,因为压缩布隆过滤器是极大节省空间的数据结构,因此网络消耗是接受范围内的;
S15:Spark集群的各个节点收到广播的CBFA和CBFB后,对RDDA采用CBFB进行过滤,RDDA中的连接属性采用CBFB的n组哈希函数进行映射到CBFB位数组中存在,则说明该连接属性是RDDA和RDDB所共有的,同理可知RDDB采用CBFA进行过滤,将过滤后的RDDA和RDDB进行下一步连接运算。
进一步,所述步骤S2具体包括:采用Master-Slaves模式,通过蓄水池采样算法,各个Slave节点抽取Key值分布和数据,每个样本被抽取的概率都为K/N,是相等的,其中K表示抽取样本数量,N表示样本总数量;根据样本中的各个Key的频率分布,计算出近似于总体的分布情况,判断大表数据Key值是否倾斜。
进一步,所述步骤S2具体包括以下步骤:
S21:在进行map任务之前,首先从输入数据中选择具有固定大小k的均匀随机样本,而不进行替换,这一步的目标是形成基础蓄水池;
S22:从第k+1个样本后,蓄水池中的的样本被k+1个数据替换的概率=第k+1个样本被选中的概率*第i个数被替换的概率,即为
S23:对于第j个数据,其中j>k,第j个数据被选中的概率为k/j;不被第j+1个数替换的概率为
S24:最后各个Slave节点将数据汇总到Master节点中,生成蓄水池采样数据,蓄水池采样数据可以保证原始数据中key更加接近整体情况。
进一步,所述步骤S3具体包括:在步骤S2检测到数据倾斜后,计算出数据簇的平均负载额定容量,设置倾斜容忍度,数据簇数据切割网络传输时间大于节点业务处理时间就不切割数据;其余的倾斜数据簇根据平均负载额定容量进行切割,尽可能保证每个数据簇大小相同。
进一步,所述步骤S3具体包括以下步骤:
S31:在步骤S2中采样的数据集合为SC={SC
S32:通过计算每个桶中的标准额定容量Havg,Havg表示为:
S33:对SC
S34:当SC
S35:在每次迭代处理后,SC
本发明的有益效果在于:本发明有助于在Spark计算框架中两个大表在连接查询时过滤掉大量无用数据,改进数据倾斜情况,缩短连接查询时间,解决Spark集群节点内存溢出问题,提高用户满意度。
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:
图1为本发明基于Spark计算框架的大表连接优化方法的整体流程图;
图2为本发明中谓词下推策略结合压缩布隆过滤器进行数据过滤的示意图;
图3为搭建数据倾斜检测模型流程图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
请参阅图1~图3,本发明提供一种基于Spark计算框架的大表连接优化方法,具体包括以下步骤:
步骤1:利用扩展Bloom Filter进行数据清洗,过滤掉大量无用数据;这里的数据包括智能电网、互联网或工业等结构化数据。
如图2所示,首先采用谓词下推策略,对不满足连接条件的表A和表B的数据进行初次过滤,再生成两个新的RDD,分别存放表A和表B的连接属性,再利用压缩布隆过滤器对RDDA和RDDB进行哈希映射操作,得到多个节点位数组,最后再对各个位数组进行或操作生成数据过滤后的新表A和新表B。
步骤2:搭建数据倾斜检测模型,通过蓄水池采样的方式统计出全局Map阶段Key值分布;
如图3所示,数据检测模型采用Master-Slave模式,在Spark的Driver节点上部署Master,在Worker节点上部署Slave。利用RDD sample算子按设定比率进行蓄水池采样,随着采样的进行,Key计数器不断增加,再利用长尾理论中的西蒙模型判断Key分布直方图是否达到了稳态,达到稳态后即采样结束。最后各个Slave节点将Key分布直方图返回Master节点,生成全局Key数据倾斜检测模型。
步骤3:针对数据倾斜的Reduce节点的负载均衡策略;
1)记采样的数据集合为SC={SC
2)通过计算每个桶中的标准额定容量Havg,Havg表示为:
3)对SC
4)当SC
5)在每次迭代处理后,SC
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
机译: 一种用于汽车自动变速器的降档切换点优化方法,涉及将切换过程控制的时间工作流馈送到切换策略软件,并基于计算的持续时间确定点
机译: 本发明是一种计算机程序/应用程序,其吸收用户输入/数据和输出/草稿/创建一个/任何积极行为支持计划,包括附录在内,符合当前澳大利亚和国际上关于积极行为支持的模型和标准。针对残疾人和/或心理健康问题的以人为本,基于力量的康复框架。本发明旨在从积极行为支持计划,其相应的附录,相应的文档和所有相关实践中消除人为错误。
机译: RAM-IP:一种基于风险管理框架的过程优化,过程控制和绩效管理的计算机化方法