论文部分内容阅读
随着电子商务、社交网络以及物联网等新一代大规模互联网应用的快速发展,企业需要存储与处理的数据规模已发展到TB级甚至PB级。云计算数据处理系统Hadoop采用了数据并行计算的思想处理大数据,其提供的编程模型MapReduce近年来被广泛用于企业信息处理、科学实验统计、生物计算等领域。使用MapReduce进行复杂数据分析处理时,查询请求都是通过翻译工具翻译成MapReduce作业流进行处理,然而目前通过翻译工具生成的MapReduce作业流存在作业数量过多,作业代码冗长等问题,导致查询执行效率低下,已经不能很好的适应人们的需求。本文针对MapReduce上层的高级查询工具存在的问题,对类SQL查询到MapReduce作业流的翻译优化技术进行了研究。 本文分析了当前MapReduce上层的高级查询工具对查询语句的翻译优化过程,结合Hadoop在扫描数据时采用暴力扫描,并且将计算结果保存到本地磁盘及HDFS的特性,确定了作业之间最基础的输入数据相关性和前驱相关性,根据作业相关性,设计了作业之间的合并规则,解决了作业流优化中如何判断作业是否可以合并以及如何合并的问题,为作业流优化提供支撑。针对作业流包含作业数量过多、无法快速找出最优合并方案的问题,提出了自底向上和自顶向下两种合并策略,实现作业流中作业的快速合并。同时本文分析了MapReduce作业的执行过程,建立了计算作业执行代价的数学模型,解决了预估作业流执行代价的问题。最后将合并策略与代价模型结合,设计了基于代价的相关性敏感的作业合并算法,利用该算法可以在作业合并时,选择执行代价较小的作业流作为最终的合并结果,从而保证类SQL查询被翻译为高效的作业流。 本文设计并开发了SQLMR系统,实现上述功能,并搭建了实验平台,通过基准测试集TPC-H生成测试数据,将SQLMR系统与Hive和YSmart进行了性能对比。实验结果表明,SQLMR与Hive、YSmart相比,翻译得到的作业流可以有效减少磁盘I/O开销、网络传输开销,具有明显性能优势。