通过共享扫描和计算任务来提高Hadoop Hive的性能外文翻译资料

 2022-12-22 17:46:10

英语原文共 11 页,剩余内容已隐藏,支付完成后下载完整资料


研究 开放存取

通过共享扫描和计算任务来提高Hadoop Hive的性能

Tansel Dokeroglu1*, Serkan Ozal1, Murat Ali Bayir2, Muhammet Serkan Cinar3 and Ahmet Cosar1

摘要

MapReduce是一种流行的编程模型,用于执行耗时的分析查询,作为大规模数据集群上的一批任务。 在具有相似选择谓词,公共表和连接任务的多个查询同时到达的环境中,可能出现许多共享扫描和/或连接计算任务的机会。

仅执行一次常见任务可以显着减少一批查询的总执行时间。 在本研究中,我们提出了一个多查询优化框架SharedHive,以提高Hadoop Hive的整体性能,Hadoop Hive是一个使用MapReduce的基于SQL的开源数据仓库。 SharedHive将一组相关的HiveQL查询转换为一组新的插入查询,这些查询将在更短的执行时间内生成所有必需的输出。 通过实验证明,SharedHive可以显着减少TPC-H查询的总执行时间。

关键词:Hadoop; Hive; 数据仓库; 多查询优化

介绍

Hadoop是一种流行的开源软件框架,允许分布式处理大规模数据集[1]。它使用MapReduce范例将计算任务划分为可以分发到商品集群的部分,因此提供了横向可扩展性[2-9]。 Hadoop的MapReduce函数使用(键,值)对作为数据格式。从Hadoop分布式文件系统(HDFS)以块的形式检索输入,并将其分配给将并行处理数据并为reduce步骤生成(k1,v1)对的映射器之一。然后,(k1,v1)对经过shuffle阶段,将相同的k1对分配给同一个reducer。 Reducer将具有相同k1值的对收集到组中并执行聚合操作(参见图1)。 HDFS是Hadoop的底层文件系统。由于其简单性,可扩展性,容错性和高效性,Hadoop得到了业界和学术界的大力支持;然而,在界面和性能方面存在一些限制[10]。使用Hadoop在传统的RDBMS基础架构中查询数据是Hadoop用户面临的最常见问题之一。 这会影响大多数不熟悉MapRecece作业内部细节的用户从数据仓库中提取信息。

Hadoop Hive是一个基于SQL的开源分布式仓库系统,旨在通过在Hadoop框架之上提供类似SQL的抽象来解决上述问题。 Hive是一个SQL-to-MapReduce转换器,带有SQL方言HiveQL,用于查询存储在集群中的数据[11-13]。 当用户想要从MapReduce和SQL中受益时,将SQL语句映射到MapReduce任务可能会变得非常困难[14]。 Hive通过将查询转换为MapReduce作业来完成这项工作,从而在展示熟悉的SQL抽象的同时利用Hadoop的可伸缩性[15]。 Hive的这些属性使其成为数据仓库应用程序的合适工具,在这些应用程序中,分析大规模数据,不需要快速响应时间,并且无需频繁更新数据[4]。

由于大多数数据仓库应用程序都是使用基于SQL的RDBMS实现的,因此Hive降低了将这些应用程序迁移到Hadoop的障碍,因此,已经了解SQL的人可以轻松使用Hive。实际上,Hive使开发人员可以更轻松地将基于SQL的应用程序移植到Hadoop。

*Correspondence: tansel@ceng.metu.edu.tr 1Middle East Technical University Computer Engineering Department,

Cankaya, Ankara, Turkey Full list of author information is available at the end of the article

copy; 2014 Dokeroglu et al.; licensee Springer. This is an Open Access article distributed under the terms of the Creative Commons Attribution License (http://creativecommons.org/licenses/by/4.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly credited.

图 1 MapReduce 任务.

由于Hive基于一次查询模型并独立处理每个查询,因此在紧密时间间隔内发出多个查询会降低Hive由于其执行模型而导致的性能。 从这个角度来看,重要的是要注意到迄今为止还没有研究结合Hive的多查询优化(MQO)技术来减少一批查询的总执行时间[16-18]。

关于传统仓库的MQO的研究表明,它是一种有效的技术,可以显着提高耗时的决策支持查询的性能[2,19-21]。 为了提高Hadoop Hive在大规模发布的查询环境中的性能,我们提出了SharedHive,它将HiveQL查询作为批处理进行处理,并通过在将相关查询传递给Hive查询优化器之前合并相关查询来改善总执行时间[6,15],22]。 通过分析相关HiveQL查询的常见任务,我们将它们与一组新的插入查询合并,并使用优化算法并作为批处理执行。 开发的模型作为Hadoop Hive架构的新组件而引入。

在“相关工作”部分中,简要介绍了与MQO类似的相关工作,与Hive类似的SQL-to-MapReduce转换器,以及最近对MapReduce框架的查询优化研究。 SharedHive系统架构部分介绍了Hive的传统架构,并介绍了我们的新型MQO组件。 下一节(共享HiveQL查询的扫描和计算任务)解释了从相关查询生成一组合并插入查询的过程。 实验设置和结果部分讨论为评估具有不同相关性级别的HiveQL查询的SharedHive框架而进行的实验。 结论之前的部分介绍了SharedHive与其他基于MapReduce的MQO方法的比较。

我们的结论性意见在结论和未来工作科中给出。

相关工作

MQO问题是在20世纪80年代引入的,使用MQO找到最优的全局查询计划被证明是NP-Hard问题[16,23]。从那时起,在RDBMS和数据分析应用方面开展了大量工作[24-26]。 Mehta和DeWitt在规划多个查询期间考虑了CPU利用率,内存使用和I / O负载变量,以确定并行数据库中的运营商内并行度,以最大限度地减少分簇连接的总执行时间。 ods [27]。 Beynon [28]提出了一种基于代理的基础设施,用于处理数据密集型应用程序。但是,此基础架构的可扩展性不如多个后端可用的分布式缓存服务器集合。 [29]提出了一种通过多查询重建算法降低通信成本的数据集成系统。点燃[30]和QPipe [31]是重要的研究,它们使用微机概念进行查询操作,以减少一组查询的总执行时间。针对现有的SPARQL查询引擎,提出了一种新的MQO框架[32]。用于大规模数据分析的微软系统Scope的级联式优化器在[33]中设计。 CoScan [34,35]显示了锐化扫描操作如何使多个MapReduce查询受益。

近年来,大量的研究和商业活动专注于整合MapRecece和结构化数据库技术[36]。 主要有两种方法,要么将MapReduce功能添加到并行数据库,要么将数据库技术添加到MapReduce。

第二种方法更具吸引力,因为没有广泛可用的开源并行数据库系统,而MapReduce可作为开源项目使用。 此外,MapReduce还附带了大量免费工具以及集群可用性和支持。 Hive [11],Pig [37],Scope [20]和HadoopDB [10,38]是在MapReduce平台之上提供SQL抽象以使程序员熟悉复杂查询的项目。 SQL / MapReduce [39]和Greenplum [21]是最近使用MapReduce处理用户定义函数(UDF)的项目。

最近,有一些有趣的研究将MQO应用于非结构化数据的MapReduce框架; 例如,MRShare [40]将一批输入查询作为单个查询处理。 用于执行的查询的最佳分组被定义为基于MapReduce成本模型的优化问题。 报告的MRShare实验结果证明了其有效性。 尽管有一些初步的MQO研究减少了基于MapReduce的单个查询的执行时间[41],但据我们所知,没有类似于我们的研究通过使用插入查询语句与Hadoop Hive的MQO相关。

SharedHive系统架构

在本节中,我们将简要介绍其体系结构

SharedHive是Hadoop Hive的修改版本

将一个新的MQO组件插入到顶部

Hive的驱动程序组件(参见图2)。输入到

包含编译器,优化器和执行器的驱动程序

由添加的Multiple Query Opti mizer组件预处理,该组件分析传入的查询和

生成一组合并的HiveQL插入查询。最后,

剩下的查询没有任何关联

与其他人在相关的末尾附加

查询集。系统目录和关系数据库

存储结构(关系,属性,分区等)

并由Metastore维护。一旦成为HiveQL语句

提交,由控制的驱动程序维护

执行任务以回答查询。

编译器解析查询字符串并转换

将树解析为逻辑计划。优化器执行几个

传递逻辑计划并重写它。物理计划生成器根据逻辑计划创建物理计划。

HiveQL语句通过Command提交

线路接口(CLI),Web用户界面或

节俭界面。 通常,查询将定向到

传统Hive架构中的驱动程序组件。 在

SharedHive,MQO组件(位于

客户端接口)之前接收传入的查询

驱动程序组件。 传入的查询集是

检查,检测它们的公共表和中间COM连接,并合并以获得一组新的HiveQL查询,以回答所有传入的查询。

有关此过程的详细信息,请参阅下一节。

新的MQO组件将新的合并查询集传递给Hive驱动程序的编译器组件,该组件使用来自Metastore的信息生成逻辑计划,并使用单个基于规则的优化器优化此计划。 执行引擎接收MapReduce的有向非循环图(DAG)和相关的HDFS任务,然后根据任务的相关性执行它们。 新的MQO组件不需要对Hadoop Hive的系统架构进行任何重大更改,并且可以轻松集成到Hive中。

共享HiveQL查询的扫描和计算任务

为了从输入查询的常见扫描/连接任务中受益并减少冗余任务的数量(即总量),SharedHive将输入查询合并到一组新的HiveQL插入查询中,并将每个查询的答案作为单独的HDFS生成 文件。

合并一组查询的问题可以正式描述为:

输入:一组HiveQL查询 Q={q1,...,qn}.

输出:一组合并的HiveQL查询Q={q1,...,qm},

其中 m le; n.

R以这种方式重写/组合给定的输入查询

查询集Q的总执行时间

小于

查询集Q的总执行时间。如果执行时间

查询qi用ti表示

给定qj是对应于查询qj和qk的合并插入查询,然后是所有输出元组和

两个查询所需的列必须由query qj生成,保留qj和qk的谓词属性。

Hive的现有体系结构生成多个并行运行的作业来回答查询。 由SharedHive合并的插入查询可以在一组新的插入查询中组合输入查询的扫描和/或中间连接操作,并通过减少MapReduce任务的数量和读/写HDFS文件的大小来提高性能。

与传统的SQL语句不同,HiveQL连接查询语句是在查询[15]的FROM部分编写的,如

i

图2使用新添加的多个查询优化器组件的SharedHive的体系结构

SELEC

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[20977],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。