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默认在发生宽依赖时,会把每个阶 ...
【技术保护点】
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/...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。