论文部分内容阅读
近几年,Spark作为下一代通用大数据计算平台,因其高效的海量数据处理能力得到了越来越多企业和研究人员的关注。Spark SQL作为Spark上的结构化数据查询引擎被越来越多的企业、机构用于分析他们积累的结构化数据,从中挖掘有价值的信息。然而,相较于传统的数据库以及MapReduce类查询引擎而言,Spark SQL仍然缺乏基于代价模型的查询优化手段。因此,本文借鉴数据库领域以及MapReduce上的查询优化技术,结合Spark自身的特点,提出了一个基于代价模型的查询优化原型,用以提高Spark SQL在关系查询上的执行效率。本文研究的重点是根据Spark计算平台自身的特点,提出一个基于代价模型的查询优化原型。相较于MapReduce类系统,Spark在计算过程中的中间结果可以缓存在内存中,减少了磁盘的读写I/O消耗。本文针对关系查询中常见的几种操作——选择、投影、分组聚合在Spark中的物理实现定义了代价模型。对等值连接的两种在Spark中的物理实现Shuffle join和Broadcast join分别定义了成本模型。在本论文中,对已有的数据库领域的查询优化方法以及MapReduce类系统上的查询优化研究进行了调研,对基于代价模型的查询优化方法进行了深入的研究。为了能更准确的估算查询计划的执行代价,优化器原型利用等深直方图这一种商业数据库常用的统计技术来获得更准确的中间结果估算。在等深直方图的基础上,定义了查询中间结果大小的估算方法。根据中间结果的估算来选择合适的表之间的连接顺序。在中间结果大小的基础上,结合Spark系统的特点,给出了Spark上的代价模型。根据定义的代价模型对等价的物理查询计划进行执行代价估算,从中找出执行代价最小的查询计划,提交给Spark计算引擎执行,并向用户返回最终结果。最后,本文对提出的基于代价模型的优化原型进行了性能测试。设定了2种不同的集群状态和4个不同的查询任务。将未优化的查询时间与优化后的查询时间进行对比。实验表明,与Spark SQL未优化前相比,优化原型可以使得查询效率提升13.51%。