论文部分内容阅读
随着互联网的飞速发展以及各类新型互联网应用的普及,企业与研究机构面临的数据规模已经高速膨胀到了TB级乃至PB级。近些年来,伴随着内存价格的下降,为了进一步提升大数据处理性能,基于内存的存储与计算逐步成为新的热点。Spark作为其中的代表,以弹性分布式数据集RDD为核心,实现了一个轻量高速可拓展的分布式内存计算框架。然而当前Spark上层的高级查询工具Spark SQL的查询翻译没有针对多查询进行优化,批处理提交SQL查询语句被翻译为不同的Spark作业,作业之间无法共享数据,无法充分发挥Spark内存计算的优势。本文针对Spark SQL存在的问题,对SQL到Spark作业查询优化机制进行了研究。本文深入分析了Spark SQL的工作流程,结合SQL查询的特点,在底层持久化文件系统与Spark核心间加入存储中间层以解决查询间输入数据的共享问题,并在复用现有分布式文件系统设计的基础上,通过合理的内存资源分配、高效的数据存储结构、低消耗的容错恢复设计优化查询数据的输入过程。在此基础上,引入多查询任务数据管理模块对存储中间层进行管理,通过介入查询任务,实现数据的一次载入、多次使用、及时释放,并针对数据载入存储中间层时面临的数据载入节点选择问题,提出了基于代价模型的数据载入节点选择策略,建立了Spark作业执行代价的数学模型,对查询作业的耗费进行预估,基于代价模型选择适当的数据载入节点,实现集群资源的高效利用,提高系统运行的效率,加快查询任务的执行速度。本文在现有Spark SQL的基础上进行改进,开发了SQL2Spark系统,实现了上述功能。通过搭建实验平台,使用基准测试工具TPC-H生成测试数据,与现有的Spark SQL就查询性能进行分析比较。实验结果表明,改进后的SQL2Spark系统能够有效提高查询速度,减少磁盘I/O开销,降低内存占用,具有明显的优势。