Apache Hive与Apache Impala的主要区别
如果你是大数据分析的新手,那么Apache工具集可能会吸引你的注意;然而,不同的工具种类可能会让人感到困惑,并且有时候会觉得压力很大。
本篇文章将解决这种困惑,并解释Apache Hive和Impala是什么以及它们之间的区别!
Apache Hive
Apache Hive是Apache Hadoop平台的SQL数据访问接口。Hive允许你使用SQL语法查询、聚合和分析数据。
在HDFS文件系统中使用读取访问方案,使得你可以像操作普通表或关系型数据库管理系统一样处理数据。HiveQL查询会转换成Java代码用于MapReduce作业。
Hive查询是用基于SQL语言的HiveQL查询语言编写的,但它并不完全支持SQL-92标准。
然而,这种语言允许程序员在使用HiveQL特性不方便或低效的情况下使用他们的查询。HiveQL可以通过用户定义的标量函数(UDFs)、聚合函数(UDAFs)和表函数(UDTFs)进行扩展。
Apache Hive是如何工作的
Apache Hive将用HiveQL语言(接近SQL)编写的程序转换为一个或多个MapReduce、Apache Tez或Apache Spark任务。这三个执行引擎可以在Hadoop上启动。然后,Apache Hive将数据组织成一个数组,用于Hadoop分布式文件系统(HDFS)上的作业在集群上运行以生成响应。
Apache Hive表类似于关系数据库,数据单元从最重要的单元到最精细的单元进行组织。数据库是由分区组成的数组,可以再次细分为“桶”。
可以通过HiveQL访问数据。在每个数据库中,数据都是有编号的,每个表对应一个HDFS目录。
Apache Hive架构中提供了多个接口,如Web界面、CLI或外部客户端。
实际上,“Apache Hive Thrift”服务器允许远程客户端使用不同的programming languages提交命令和请求到Apache Hive。Apache Hive的中央目录是一个包含所有信息的“元数据存储”。
使Hive工作的引擎称为“驱动程序”。它捆绑了一个编译器和一个优化器来确定最佳的执行计划。
最后,安全性由Hadoop提供。因此,它依赖于客户端和服务器之间的Kerberos for mutual authentication。Apache Hive中新创建文件的权限由HDFS决定,允许用户、组或其他授权。
Hive的特点
- 支持Hadoop和Spark的计算引擎
- 使用HDFS,并作为ETL工具
- 使用MapReduce并支持ETL
- 由于HDFS,具备与Hadoop类似的容错性
Apache Hive:优势
Apache Hive是一个理想的查询和数据分析解决方案。它可以提供定性洞察,并提供竞争优势,便于快速响应市场需求。
关于Apache Hive的主要优势,我们可以提到与其“SQL友好”语言相关的易用性。此外,它加快了初始数据插入的速度,因为数据不需要从内部数据库格式的磁盘上读取或编号。
知道数据存储在HDFS中,可以在Apache Hive上存储高达数百PB的大型数据集。这个解决方案比传统数据库更具可扩展性。鉴于它是一种云服务,Apache Hive允许用户根据工作负载的波动(即任务)快速启动虚拟服务器。
安全性也是Hive表现更好的一个方面,它能够在出现问题时复制恢复关键工作负载。最后,工作能力是无与伦比的,因为它可以每小时执行多达100,000个请求。
Apache Impala
Apache Impala是一个用于在Apache Hadoop中存储的数据上执行SQL查询的大规模并行SQL查询引擎,用C++编写,并在Apache 2.0许可下分发。
Impala也被称为MPP(大规模并行处理)引擎,分布式DBMS,甚至是SQL-on-Hadoop堆栈数据库。
Impala在分布式模式下运行,其中进程实例在不同的集群节点上运行,接收、调度和协调客户端请求。在这种情况下,可以并行执行SQL查询的片段。
客户端是向Apache Hadoop(HBase和HDFS)或Amazon S3中存储的数据发送SQL查询的用户和应用程序。与Impala的交互是通过HUE(Hadoop用户体验)Web界面、ODBC、JDBC和Impala Shell命令行界面进行的。
Impala在基础设施上依赖于另一个流行的SQL-on-Hadoop工具Apache Hive,使用其元数据存储。特别是,Hive Metastore让Impala了解数据库的可用性和结构。
通过SQL语句创建、修改和删除模式对象或将数据加载到表中时,相应的元数据更改会通过专门的目录服务自动传播到所有Impala节点。
Impala的关键组件如下:
- Impalad或Impala守护程序是一个在HDFS、HBase和Amazon S3数据上调度和执行查询的系统服务。每个集群节点上运行一个impalad进程。
- Statestore是一个命名服务,用于跟踪集群中所有impalad实例的位置和状态。该系统服务的一个实例在每个节点和主服务器(Name Node)上运行。
- 目录是一个元数据协调服务,将Impala DDL和DML语句的更改传播到所有受影响的Impala节点,以便新表或新加载的数据立即对集群中的任何节点可见。建议在与Statestored守护程序运行在同一集群主机上的情况下运行一个目录实例。
Apache Impala的工作原理
Impala与Apache Hive类似,使用类似的声明性查询语言Hive Query Language(HiveQL),它是SQL92的子集,而不是SQL。
Impala中请求的实际执行方式如下:
客户端应用程序通过标准化的ODBC或JDBC驱动程序接口连接到任何impalad,并发送SQL查询。连接的impalad成为当前请求的协调器。
分析SQL查询以确定集群中impalad实例的任务,然后构建最佳的查询执行计划。
Impalad使用本地系统服务的实例直接访问HDFS和HBase提供数据。与Apache Hive不同,这种直接交互显著节省查询执行时间,因为中间结果不会被保存。
每个守护程序将数据返回给协调impalad,并将结果发送回客户端。
Impala的特点
- 支持实时内存处理
- 友好的SQL
- 支持存储系统,如HDFS、Apache HBase和Amazon S3
- 支持与Pentaho和Tableau等BI工具集成
- 使用HiveQL语法
Apache Impala的优势
Impala避免了可能的启动开销,因为所有系统守护进程进程都是在启动时直接启动的。这显著节省了查询执行时间。Impala的速度进一步增加是因为这个针对Hadoop的SQL工具不像Hive那样存储中间结果,而是直接访问HDFS或HBase。
此外,Impala在运行时生成程序代码,而不是在编译时生成,就像Hive一样。然而,Impala高速性能的一个副作用是可靠性降低。
特别是,如果在执行SQL查询过程中数据节点崩溃,Impala实例将重新启动,而Hive将继续保持与数据源的连接,提供容错能力。
Impala的其他优点包括内置支持安全网络认证协议Kerberos、优先级和请求队列管理以及对流行的大数据格式(如LZO、Avro、RCFile、Parquet和Sequence)的支持。
Hive与Impala:相似之处
Hive和Impala是在Apache软件基金会许可下自由分发的,并且是用于与存储在Hadoop集群中的数据一起工作的SQL工具。此外,它们还使用HDFS分布式文件系统。
Impala和Hive在一个共同的重点上实现了不同的任务,即在Apache Hadoop集群中对存储的大数据进行SQL处理。Impala提供类似SQL的接口,允许读取和写入Hive表,从而实现了简单的数据交换。
同时,Impala在Hadoop上执行SQL操作非常快速高效,允许将该数据库管理系统用于大数据分析研究项目。在可能的情况下,Impala可以与现有的Apache Hive基础架构一起使用,用于执行长时间运行的SQL批处理查询。
此外,Impala将其表定义存储在元数据存储中,即传统的MySQL或PostgreSQL数据库,也就是Hive存储类似数据的地方。这使得Impala能够访问Hive表,只要所有列使用Impala支持的数据类型、文件格式和压缩编解码器。
Hive与Impala:区别
编程语言
Hive是用Java编写的,而Impala是用C++编写的。然而,Impala还使用一些基于Java的Hive UDF。
用例
数据工程师在ETL过程(提取、转换、加载)中使用Hive,例如在旅行聚合器和机场信息系统中对大数据集运行长时间批处理作业。而Impala主要用于分析师和数据科学家,主要用于任务如 business intelligence。
性能
Impala实时执行SQL查询,而Hive的数据处理速度较慢。对于简单的SQL查询,Impala的运行速度可以比Hive快6到69倍。然而,Hive更擅长处理复杂的查询。
延迟/吞吐量
Hive的吞吐量比Impala高得多。LLAP(长期存储和处理)功能在内存中启用查询缓存,使得Hive具有良好的低级性能。
LLAP包括长期系统服务(守护进程),允许直接与HDFS数据节点交互,并替换紧密集成的DAG查询结构(有向无环图)-这是大数据计算中经常使用的图模型。
容错能力
Hive是一个容错系统,会保留所有中间结果。这也对可伸缩性产生积极影响,但会导致数据处理速度降低。而Impala不能被称为一个容错平台,因为它更受内存限制。
代码转换
Hive在编译时生成查询表达式,而Impala在运行时生成。Hive在应用程序首次启动时会出现“冷启动”问题,由于需要建立与数据源的连接,查询转换速度较慢。
Impala没有这种启动开销。处理SQL查询所需的必要系统服务(守护进程)在启动时启动,从而加快工作速度。
存储支持
Impala支持LZO、Avro和Parquet格式,而Hive使用Plain Text和ORC。然而,两者都支持RCFile和Sequence格式。
Apache Hive | Apache Impala | |
语言 | Java | C++ |
使用情况 | Data Engineering | 分析和分析 |
性能 | 简单查询的性能高 | 相对较低 |
延迟 | 由于缓存而有更多延迟 | 延迟较低 |
容错性 | 由于MapReduce而更具容错性 | 由于MPP而更容易出错 |
转换 | 由于冷启动而转换缓慢 | 转换更快 |
存储支持 | 纯文本和ORC | LZO,Avro,Parquet |
最后的话
Hive和Impala并不竞争,而是有效地互补。尽管两者之间存在显着差异,但也有很多共同之处,选择其中一个取决于项目的数据和特定要求。
您还可以探索Hadoop and Spark之间的面对面比较。
.