比较Hadoop上的SQL引擎Hive,Spark,Impala

简单的介绍

Spark,Hive,Impala和Presto是基于SQL的引擎。

Impala由Cloudera开发和交付。 就Impala而言,它也是一个基于Hadoop设计的SQL查询引擎。 Impala查询不会转换为MapReduce作业,而是本地执行。

Presto是一个开放源代码的分布式SQL查询引擎,旨在运行甚至PB级的SQL查询。 它是由Facebook人设计的。

Spark SQL是一个分布式内存计算引擎。 它的内存处理能力很高。 Spark还支持Hive,现在也可以通过Spike对其进行访问。

Hive也由Apache引入作为查询引擎。 这使数据库工程师的工作更加轻松,他们可以轻松地在结构化数据上编写ETL作业。 在发布Spark之前,Hive被认为是最快速的数据库之一。

什么是Spark?

Apache Spark是最受欢迎的SQL引擎之一。 它是通用数据处理引擎。 在核心火花数据处理的顶部还有很多其他库,例如图形计算,机器学习和流处理。 这些库可以在应用程序中一起使用。 Spark支持以下语言,例如Spark,Java和R应用程序开发。

Spark应用程序运行几个独立的进程,这些进程由驱动程序中的SparkSession对象协调。 Spark应用程序作为独立进程运行,这些进程由驱动程序中的Spark Session对象协调。 集群或资源管理器还将任务分配给工作人员。 任务将其工作单位应用于数据集,结果,创建了一个新的数据集分区。 最终结果可以存储并保存在磁盘上,也可以发送回驱动程序。

Spark可以处理PB级的数据,并在分布于几个物理和虚拟群集之间的数千个群集中以分布式方式处理数据。 Spark被用于各种应用程序,例如

· 流处理· 机器学习· 互动分析· 资料整合

由于其有益的功能(例如速度,简便性和支持),Spark被许多用户选择。 可以通过一组丰富的API来访问Spark的功能,这些API专门用于快速,轻松地与数据进行交互。 Apache Spark社区庞大且支持您快速,快速地获得查询的答案。

什么是Impala?

Impala是一个大规模并行处理引擎,是一个开源引擎。 它要求将数据库存储在运行Apache Hadoop的计算机群集中。 这是一个SQL引擎,由Cloudera在2012年推出。

Hadoop程序员可以以出色的方式在Impala上运行其SQL查询。 它被认为是一种高效的引擎,因为它在处理之前不会移动或转换数据。 该引擎可以轻松实现。 Impala的数据格式,元数据,文件安全性和资源管理与MapReduce相同。

它具有Hadoop的所有特质,还可以支持多用户环境。 以下列出了使Impala非常有用的两个最有用的品质:

1)列存储

2)树结构

Impala的一些流行功能:

· 支持Apache HBase存储和HDFS或Hadoop分布式文件系统· 支持Kerberos身份验证或Hadoop安全性· 它可以轻松读取Apache Hive的元数据,SQL语法和ODBC驱动程序· 它可以识别Hadoop文件格式,RCFile,Parquet,LZO和SequenceFile· Apache Sentry基于角色的授权。

Impala在2年内崛起,已成为最重要的SQL引擎之一。 现在,甚至Amazon Web Services和MapR都已列出了对Impala的支持。

什么是Hive?

用于查询和管理大型数据集的Apache Hive数据仓库软件设施使用分布式存储作为其后端存储系统。 它建立在Apache之上。 该工具是在Hadoop文件系统或HDFS的顶部开发的。 Hadoop可简化以下任务:

· 临时查询· 数据封装· 庞大的数据集和分析

Hive特征

· 在Hive中,首先创建数据库表,然后将数据加载到这些表中· Hive旨在管理和查询存储表中的结构化数据· Map Reduce没有可用性和优化功能,但是Hive具有这些功能。 查询优化可以高效地执行查询· Hive的启发性语言降低了Map Reduce编程的复杂性,并重用了其他数据库概念,例如行,列,模式等。· Hive使用目录结构进行数据分区并提高性能· Hive的大多数交互都是通过CLI或命令行界面进行的,并且HQL或Hive查询语言用于查询数据库· Hive支持四种文件格式,即TEXTFILE,ORC,RCFILE和SEQUENCEFILE

Hive的三个核心部分

· Hive客户端· Hive服务端· Hive存储和计算

通过不同的驱动程序,Hive与各种应用程序进行通信。 与基于Java的应用程序一样,它使用JDBC驱动程序,对于其他应用程序,它使用ODBC驱动程序。 Hive客户端和驱动程序然后再次与Hive服务和Hive服务器通信。 Hive客户端可以通过Hive服务解决其查询。

CLI或命令行界面在这里就像Hive服务一样,用于数据定义语言操作。 来自不同应用程序的请求由驱动程序处理,并转发到不同的Meta商店和现场系统进行进一步处理。

Hive服务(如作业客户端,文件系统和元存储)与Hive存储进行通信,并用于执行以下操作:

· 在Hive中创建并存储了表的元数据信息,也称为"元存储数据库"· 数据和查询结果加载到表中,这些表以后存储在HDFS上的Hadoop集群中

配置单元在本地模式或地图缩小模式下执行。 如果数据大小较小或处于伪模式下,则使用Hive的本地模式可以提高处理速度。 对于大量数据或多节点处理,使用Hive的Map Reduce模式可提供更好的性能。

参考文献:

janbasktraining.com/blog/how-to-compare-hive-spark-impala-and-presto/

(本文翻译自Z² Little的文章《Hive, Spark, Impala, Hadoop》,参考:https://medium.com/@xzz201920/hive-spark-impala-presto-6ddde773ccd4)