当前位置: 首页 > 专利查询>东南大学专利>正文

一种提高Spark SQL的查询效率的方法技术

技术编号:19263428 阅读:43 留言:0更新日期:2018-10-27 02:21
本发明专利技术公开了一种提高Spark SQL的查询效率的方法。本发明专利技术包括步骤S1:构建查询预分析模块,通过估算模型,计算Shuffle产生的中间数据的大小,从而计算出用于缓存所述中间数据的中间数据缓存层的总大小;步骤S2:根据步骤1计算出的中间数据缓存层的总大小,结合集群中每个结点输入数据的分布情况,通过缓存层分配模块为每个结点设置合理的内存空间大小。本发明专利技术能有效地通过Shuffle中间数据缓存处理方法解决Spark SQL查询中磁盘I/O开销较高的问题。

A method to improve query efficiency of Spark SQL

The invention discloses a method for improving the query efficiency of Spark SQL. The invention comprises a query pre-analysis module which calculates the size of the intermediate data generated by Shuffle by estimating the model, thereby calculating the total size of the intermediate data buffer layer for caching the intermediate data; and a query pre-analysis module which calculates the total size of the intermediate data buffer layer according to step 1 and combines each of the clusters. Each node input data distribution, through the cache layer allocation module for each node set a reasonable size of memory space. The invention can effectively solve the problem of high disk I/O overhead in Spark SQL query by Shuffle intermediate data cache processing method.

【技术实现步骤摘要】
一种提高SparkSQL的查询效率的方法
:本专利技术涉及一种提高SparkSQL的查询效率的方法,具体涉及一种通过Shuffle操作中间数据缓存的处理提高SparkSQL的查询效率的方法。
技术介绍
:随着互联网的不断发展与普及,企业、政府机关,科研机构等每天产生的数据量是可观的。例如,淘宝每天产生的数据量达到7T,百度每天需要处理的数据量达到了100PB,处理大数据的现实需求促进了云计算领域很多的学术研究。ApacheSpark是一个基于内存的计算框架,它以弹性分布式数据集RDD(ResilientDistributedDatasets)的实现为核心,实现数据的分布与容错。Spark是一个高速而通用的大数据处理引擎,由加州大学伯克利分校AMP(Algorithms,Machines,andPeopleLab)实验室团队使用语言Scala开发。SparkSQL从基于Hive的Shark开发而来,是一种用于处理结构化数据的Spark组件。Spark在执行一个作业的过程中,会首先为该作业生成一个有向无环图(DirectedAcyclicGraph,DAG)来记录所进行的操作。其次,DAG图将会根据RDD间的依赖关系被划分成若干个阶段,同一个阶段中的RDD之间的依赖关系均为窄依赖,连接两个阶段的RDD之间的依赖关系为宽依赖。在发生窄依赖时,数据在内存中的多个RDD操作之间进行传递,不会发生磁盘I/O开销。但是在发生宽依赖时,由于需要读取所有的父RDD的内容并做连接操作,该操作开销较大,如果都在内存中进行容易内存溢出。因此Spark默认在发生宽依赖时,会把每个阶段生成的中间数据写到磁盘,该过程称为Shuffle。而SparkShuffle阶段会产生大量的中间数据,图1是SparkSQL运行一个简单查询产生中间文件的个数,最多时产生了8000个文件,并且波动较大从而造成了大量的随机磁盘I/O开销,该开销是阻碍SparkSQL执行效率的主要因素之一。
技术实现思路
本专利技术的目的是提供一种提高SparkSQL的查询效率的方法,通过Shuffle中间数据缓存处理方法解决SparkSQL查询中磁盘I/O开销较高的问题。上述的目的通过以下技术方案实现:一种提高SparkSQL的查询效率的方法,该方法包括如下步骤:步骤S1:构建查询预分析模块,通过估算模型,计算Shuffle产生的中间数据的大小,从而计算出用于缓存所述中间数据的中间数据缓存层的总大小;步骤S2:根据步骤1计算出的中间数据缓存层的总大小,结合集群中每个结点输入数据的分布情况,通过缓存层分配模块为每个结点设置合理的内存空间大小。进一步地,步骤S1中所述的计算Shuffle产生的中间数据的大小的具体方法是:查询预分析模块通过解析用户输入的查询语句得到Spark下该作业的工作流,根据估算模型计算工作流中每个阶段生成的中间数据大小。进一步地,步骤S2中在获得缓存层的总大小后,缓存层分配模块统计输入数据的每一个数据块在集群中的分布情况,按比例为不同的结点开辟不同大小的内存。进一步地,所述工作流包括两个阶段,分别是进行投影、选择、聚集操作的阶段,和进行连接操作的阶段,每个阶段产生的中间数据的大小之后,通过求和即可得到缓存层的总大小Mtotal。进一步地,所述的投影、选择、聚集操作的阶段生成的中间数据大小的计算公式是:投影操作的阶段生成的中间数据大小:|Dout(pro)|=βpro|Din|(1)式中,|Dout(pro)|表示投影操作生成中间数据的大小,|Din|表示输入数据的大小。βpro表示做投影操作后的数据占总数据的比例,其中βpro=Lpro/LD,Lpro是投影属性长度,LD是所有属性总长度;选择操作的阶段生成的中间数据大小:|Dout(fil)|=βfil|Din|(2)式中,|Dout(fil)|表示选择操作生成中间数据的大小。βfil表示做选择操作后的数据占总数据的比例,其值由具体的选择条件和原表的数据分布有关;聚集操作的阶段生成的中间数据大小:|Dout(agg)|≈0(3)式中,|Dout(agg)|表示聚集操作生成的中间数据的大小,聚集操作返回某一属性的和或平均值,因此输出大小可以忽略不计。进一步地,所述的连接操作,使用以下规则计算该阶段输出数据的大小:式中,|Dout(join)|表示连接操作生成中间数据的大小,表示输入表格D1的大小,表示输入表格D2的大小,γ表示做连接操作后的数据占总数据的比例。如果无连接条件C,则变成笛卡尔乘积,γ=1;如果没有元组满足连接条件C,则γ=0,一般地0≤γ≤1;如果连接条件为D1.A=D2.B,则有下面三种特殊情况:(1)如果A是D1的主键,则D2中的每个元组最多与D1中的一个元组匹配,即那么,同理,若B是D2的主键,(2)如果A不是D1的主键,B也不是D2的主键,而属性A、B在相同的域M上服从均匀分布,则式中,M表示属性A、B在域M上重叠部分的大小。(3)如果A不是D1的主键,且B也不是D2的主键,而属性A、B不服从均匀分布,则γ需要根据具体的数据集,参照表结构和数据规模,实际运行采样获取数据,采用直方图方法进行估计。进一步地,所述的中间数据缓存层利用分布式内存文件系统Alluxio。有益效果:本专利技术的方法与现有的SparkSQL缓存策略相比,其显著的优点是:现有的方法通常是把输入数据存入分布式内存文件系统来提高查询效率,而在实际的生产环境中,输入数据的大小往往大于内存的最大容量,因此通过输入数据放入内存来减少磁盘I/O的方法不太现实。SparkShuffle阶段产生的中间数据的大小在通常情况下都是小于输入数据的大小的,磁盘I/O的开销主要是Shuffle阶段产生的文件数量过多而造成的随机I/O的开销。因此为了减少这部分开销,为这些数据开辟一块内存缓存层,并能根据不同的查询适当调整缓存层的大小,是本专利技术所解决的主要问题。附图说明图1为SparkShuffle中间数据波动图;图2为SparkSQL执行查询流程图;图3为数据块在集群中的分布情况图;图4为Shuffle优化后对比实验图。具体实施方式下面结合具体实施方式,进一步阐明本专利技术,应理解下述具体实施方式仅用于说明本专利技术而不用于限制本专利技术的范围。一种提高SparkSQL的查询效率的方法,该方法包括如下步骤:步骤S1:构建查询预分析模块,通过估算模型,计算Shuffle产生的中间数据的大小,从而计算出用于缓存所述中间数据的中间数据缓存层的总大小;步骤S2:根据步骤1计算出的中间数据缓存层的总大小,结合集群中每个结点输入数据的分布情况,通过缓存层分配模块为每个结点设置合理的内存空间大小。进一步地,步骤S1中所述的计算Shuffle产生的中间数据的大小的具体方法是:查询预分析模块通过解析用户输入的查询语句得到Spark下该作业的工作流,根据估算模型计算工作流中每个阶段生成的中间数据大小。进一步地,步骤S2中在获得缓存层的总大小后,缓存层分配模块统计输入数据的每一个数据块在集群中的分布情况,按比例为不同的结点开辟不同大小的内存。下面的实验是在拥有11个结点的集群的环境下进行的,其中每个结点的硬件配置是2.7GHz8核的CPU和64GB内存。使用TPC-H标准本文档来自技高网
...

【技术保护点】
1.一种提高Spark SQL的查询效率的方法,其特征在于,该方法包括如下步骤:步骤S1:构建查询预分析模块,通过估算模型,计算Shuffle产生的中间数据的大小,从而计算出用于缓存所述中间数据的中间数据缓存层的总大小;步骤S2:根据步骤1计算出的中间数据缓存层的总大小,结合集群中每个结点输入数据的分布情况,通过缓存层分配模块为每个结点设置合理的内存空间大小。

【技术特征摘要】
1.一种提高SparkSQL的查询效率的方法,其特征在于,该方法包括如下步骤:步骤S1:构建查询预分析模块,通过估算模型,计算Shuffle产生的中间数据的大小,从而计算出用于缓存所述中间数据的中间数据缓存层的总大小;步骤S2:根据步骤1计算出的中间数据缓存层的总大小,结合集群中每个结点输入数据的分布情况,通过缓存层分配模块为每个结点设置合理的内存空间大小。2.根据权利要求1所述的提高SparkSQL的查询效率的方法,其特征在于,步骤S1中所述的计算Shuffle产生的中间数据的大小的具体方法是:查询预分析模块通过解析用户输入的查询语句得到Spark下该作业的工作流,根据估算模型计算工作流中每个阶段生成的中间数据大小。3.根据权利要求1所述的提高SparkSQL的查询效率的方法,其特征在于,步骤S2中在获得缓存层的总大小后,缓存层分配模块统计输入数据的每一个数据块在集群中的分布情况,按比例为不同的结点开辟不同大小的内存。4.根据权利要求2所述的提高SparkSQL的查询效率的方法,其特征在于,所述工作流包括两个阶段,分别是进行投影、选择、聚集操作的阶段,和进行连接操作的阶段,每个阶段产生的中间数据的大小之后,通过求和即可得到缓存层的总大小Mtotal。5.根据权利要求4所述的提高SparkSQL的查询效率的方法,其特征在于,所述的投影、选择、聚集操作的阶段生成的中间数据大小的计算公式是:投影操作的阶段生成的中间数据大小:|Dout(pro)|=βpro|Din|(1)式中,|Dout(pro)|表示投影操作生成中间数据的大小,|Din|表示输入数据的大小。βpro表示做投影操作后的数据占总数据的比例,其中βpro=Lpro/...

【专利技术属性】
技术研发人员:宋爱波万雨桐
申请(专利权)人:东南大学
类型:发明
国别省市:江苏,32

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

1