论文部分内容阅读
随着互联网、物联网等行业数据规模的爆发式增长,企业在数据的处理和分析上正面临着全新的挑战。面对海量数据,传统的关系型数据库在数据的吞吐能力、分析效率和系统的可扩展性上都开始出现瓶颈。以Hadoop/Hive为代表的大数据分析系统得到了越来越广泛的应用,并在互联网业务处理中取得了极大的成功,这也吸引到诸如智能电网、金融等传统企业的注意。这些传统企业希望将原有基于关系型数据库的业务迁移至Hadoop/Hive来加速查询处理。然而,在迁移的过程中,他们既希望获得Hadoop/Hive系统高吞吐的计算能力,又希望保留传统关系型数据库的一些高级特性(如复杂查询优化),因而面临两难的选择。由于关系数据库的框架限制明显,解决难题最为有效的方法是增强Hadoop/Hive的相关特性,使其更适用于传统企业的业务处理。 本文的研究工作致力于增强现有大数据平台对以存储过程为代表的复杂批处理查询的计算能力。现有的诸多大数据处理引擎,如Hive、Pig、Impala等,在处理这类传统企业查询时存在以下不足:(1)不能直接兼容原有SQL语句,例如Hive只能支持类SQL语言HiveQL;缺少基于代价的查询优化功能,无法很好对多表连接等复杂查询进行优化处理;(2)不能对多个查询语句进行整体优化,无法在保证单查询执行效率的同时有效减少多个查询间冗余的任务处理;(3)不能在大数据环境下对原有的查询表结构进行优化,无法最大化利用大数据平台的查询处理优势。 本文使用了一系列查询优化技术来解决以上三个不足之处,并在目前较为成熟和通用的系统Hive上进行了实现。研究工作具体如下: 1.设计并实现了QMapper,能够将SQL语句自动映射为等价且最优的HiveQL语句。 现有的诸多大数据系统往往有自定义的查询语言,想要将关系型数据库中的SQL语句直接运行在这些系统之上是不可行的。在这种情况下,业务迁移时需要将原SQL语句按新系统的查询语言进行等价重写。然而,智能电网等传统企业的业务逻辑往往十分复杂,涉及到数目众多的存储过程,人工翻译不仅需要巨大的劳动量,而且正确率难以保证。QMapper通过分析总结SQL到HiveQL的映射方法,基于关系代数的等价变换规则,能够自动将SQL语句重写为等价的HiveQL语句。此外,一个SQL语句可能对应着多个等价的HiveQL语句,由于关系型数据库和Hadoop在计算和存储模型上存在巨大差异,一个在关系数据库中优化过的SQL查询直译为HiveQL后未必有好的执行效果。QMapper提出了一个基于代价的查询优化器,能够在这些等价的HiveQL中选择性能最优的语句作为重写方案。 2.在MapReduce环境下提出了一种面向复杂多表连接查询的多查询优化算法,并实现了相应的查询优化器MQMapper。 在现有的大数据查询优化工作中,多表连接优化和查询结果重用是两个重要的技术。前者可以对单个查询的多表连接顺序进行优化,得到单查询较优的执行方案;后者可以对多个查询间相同或冗余的任务进行合并,得到较优的多查询整体执行方案。然而,目前的工作都忽略了两者之间的联系甚至冲突。一味地为每个查询选择最优的连接方案可能失去多个查询间重要的重用机会;而盲目调整连接顺序来增加查询间的重用机会可能会导致效率极低的单个查询方案。MQMapper能够对两个技术进行权衡,在保证单个查询执行效率的情况下减少多个查询之间的任务冗余。基于TPC-H的实验表明,MQMapper相对于单独的两种技术分别有15%和20%左右的性能提升。 3.提出了一种业务迁移时的表结构优化方法,能够在大数据平台下对原有的基于关 系数据库的查询表结构进行优化设计,并实现了相应的系统TMapper。 传统企业的业务中可能包含着上千张互相连接的表。此时,关系数据库范式被用来减少数据冗余,保证查询时的数据一致性。而在诸如Hive等大数据平台,工程师更倾向于构建宽表来最大化利用系统批量读写的优势,去规范技术可以被用来优化查询效率。将传统企业的业务从关系数据库迁移至Hadoop/Hive时,我们将面临两难选择:遵守范式设计可能会失去大数据平台下的性能优势,而贸然设计去规范化方案可能会带来更多的额外开销,甚至降低查询性能。针对这一问题,本文提出了TMapper,可以在业务迁移时自动化生成高效的去规范化方案,并对原有SQL语句进行对应重写。通过分析查询负载,TMapper能够有效权衡查询效率、更新代价等影响去规范化方案效果的因素。基于TPC-H和真实数据集的实验也证明了TMapper的有效性。