论文部分内容阅读
近几年MapReduce的出现推动了云计算技术的快速发展,低成本与高可伸缩性使其得到广泛应用。同时,为了增强了用户代码的可维护性,用于将高层查询语言转换为MapReduce的Hive、Pig等系统应运而生。这些系统在互联网企业中最为流行。然而,随着数据量的激增,对于传统企业来说寻求一个高性能、高可靠以及低成本的需求也变得尤为突出。Hive和Hadoop平台对传统企业来说无疑是一个优秀的数据分析平台。 然而,与互联网企业不同的是,传统企业中有许多已有的基于RDBMS的数据分析应用。如何将已有应用迁移到新的云计算平台成为一个严峻的挑战。考虑到语法层次的差异以及RDBMS与MapReduce代价模型的不同,手工将SQL转换为HiveQL是费时且困难的:一方面手工转换容易造成错误,另一方面经常导致较差的性能。本文设计并实现了一个原型系统QMapper,提出一个基于规则的查询重写器以及基于代价的查询优化器。具体工作包括以下几个方面: (1)设计并实现QMapper原型系统,它可以实现从SQL至HiveQL的自动转换和优化。本文工作集中于针对Hive和Hadoop的改写规则和代价模型,我们将改写规则与代价模型设计为可扩展的模式,因此未来QMapper可以进一步应用于兼容HiveQL的其他系统,例如Shark和Impala。 (2)设计了基于规则和代价的混合查询重写器。本文提出的基于规则的查询重写器可以完成SQL中的DML以及包含EXISTS等子查询操作符至HiveQL的自动转换。另外,本文设计了一个基于代价的JOIN优化器。传统的关系型数据库通常采用搜索最优Left-deep树的方式来组织JOIN,本文提出的算法同时考虑Left-deep与Bushy两种结构,以实现中间数据量与任务并行度的平衡。 (3)提出一个MapReduce任务和MapReduce任务流的代价估计模型。通过对MapReduce各阶段代价的仔细分析,本文提出的代价模型结合了MapReduce框架本身的代价消耗以及Hive层面的操作符代价,并将PostgreSQL中的统计信息收集算法实现到MapReduce上,利用PostgreSQL数据库中的基数估计模块,该模型可以用来评估一个HiveQL查询的性能。与其他已有工作不同的是,本文提出的代价模型主要通过描述MapReduce各阶段中的关键I/O消耗和基于Hive操作符的白盒模型,来体现查询性能。这种方法无需对查询语句进行预先执行,通过执行预先设计好的查询“探针”收集参数,这些参数可以直接应用于评估新提交的查询请求。