Apache Hive 与 Apache Impala:主要区别
已发表: 2022-11-23如果您不熟悉大数据分析,那么您可能会注意到大量的 apache 工具; 然而,纯粹的不同工具可能会让人感到困惑,有时甚至会让人不知所措。
这篇文章将解决这一困惑,并解释什么是 Apache Hive 和 Impala,以及它们之间的区别!
阿帕奇蜂巢
Apache Hive 是 Apache Hadoop 平台的 SQL 数据访问接口。 Hive 允许您使用 SQL 语法查询、聚合和分析数据。
读取访问方案用于 HDFS 文件系统中的数据,允许您像处理普通表或关系 DBMS 一样处理数据。 HiveQL 查询被翻译成用于 MapReduce 作业的 Java 代码。

Hive 查询是用 HiveQL 查询语言编写的,它基于 SQL 语言,但不完全支持 SQL-92 标准。
但是,这种语言允许程序员在使用 HiveQL 功能不方便或效率低下时使用他们的查询。 HiveQL 可以使用用户定义的标量函数 (UDF)、聚合(UDAF 代码)和表函数 (UDTF) 进行扩展。
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”服务器允许远程客户端使用各种编程语言向 Apache Hive 提交命令和请求。 Apache Hive 的中央目录是一个包含所有信息的“元存储”。
使 Hive 工作的引擎称为“驱动程序”。 它捆绑了编译器和优化器以确定最佳执行计划。
最后,安全性由 Hadoop 提供。 因此,它依赖于 Kerberos 在客户端和服务器之间进行相互身份验证。 Apache Hive 中新创建的文件的权限由 HDFS 规定,允许用户、组或其他授权。
蜂巢的特点
- 同时支持Hadoop和Spark的计算引擎
- 使用 HDFS 并作为数据仓库工作。
- 使用 MapReduce 并支持 ETL
- 由于HDFS,它具有类似于Hadoop的容错能力
Apache Hive:优势
Apache Hive 是查询和数据分析的理想解决方案。 它使获得定性见解成为可能,从而提供竞争优势并促进对市场需求的响应。
在 Apache Hive 的主要优势中,我们可以提到与其“SQL 友好”语言相关的易用性。 此外,它加快了数据的初始插入,因为数据不需要从磁盘以内部数据库格式读取或编号。
知道数据存储在 HDFS 中,在 Apache Hive 上存储高达数百 PB 数据的大型数据集是可能的。 该解决方案比传统数据库更具可扩展性。 知道它是一种云服务,Apache Hive 允许用户根据工作负载(即任务)的波动快速启动虚拟服务器。
安全性也是 Hive 表现更好的一个方面,它能够在出现问题时复制对恢复至关重要的工作负载。 最后,工作能力无与伦比,因为它每小时可以执行多达 100,000 个请求。
阿帕奇黑斑羚
Apache Impala 是一个大规模并行 SQL 查询引擎,用于对存储在 Apache Hadoop 中的数据交互式执行 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 命令行 shell 进行。
Impala 在基础架构上依赖于另一个流行的 SQL-on-Hadoop 工具 Apache Hive,使用其元数据存储。 特别是,Hive Metastore 让 Impala 了解数据库的可用性和结构。
当创建、修改和删除模式对象或通过 SQL 语句将数据加载到表中时,相应的元数据更改会使用专门的目录服务自动传播到所有 Impala 节点。
Impala 的关键组件是以下可执行文件:
- Impalad 或 Impala 守护进程是一种系统服务,用于安排和执行对 HDFS、HBase 和 Amazon S3 数据的查询。 一个 impalad 进程在每个集群节点上运行。
- Statestore 是一种命名服务,用于跟踪集群中所有 impalad 实例的位置和状态。 该系统服务的一个实例在每个节点和主服务器(Name Node)上运行。
- Catalog 是一种元数据协调服务,可将 Impala DDL 和 DML 语句的更改传播到所有受影响的 Impala 节点,以便集群中的任何节点都能立即看到新表或新加载的数据。 建议 Catalog 的一个实例与 Statestored 守护进程在同一台集群主机上运行。
Apache Impala 是如何工作的
Impala 与 Apache Hive 一样,使用类似的声明式查询语言 Hive 查询语言 (HiveQL),它是 SQL92 的一个子集,而不是 SQL。
Impala中请求的实际执行情况如下:
客户端应用程序通过标准化的 ODBC 或 JDBC 驱动程序接口连接到任何 impalad 来发送 SQL 查询。 已连接的 impalad 成为当前请求的协调器。
分析 SQL 查询以确定集群中 impalad 实例的任务; 然后,构建最优查询执行计划。

Impalad 使用系统服务的本地实例直接访问 HDFS 和 HBase 来提供数据。 与 Apache Hive 不同,这种直接交互显着节省了查询执行时间,因为不会保存中间结果。
作为响应,每个守护进程将数据返回给协调的 impalad,将结果发送回客户端。

黑斑羚的特点
- 支持实时内存处理
- 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 Software Foundation 许可下免费分发,是指用于处理存储在 Hadoop 集群中的数据的 SQL 工具。 此外,他们还使用了HDFS分布式文件系统。
Impala 和 Hive 执行不同的任务,共同关注存储在 Apache Hadoop 集群中的大数据的 SQL 处理。 Impala 提供类似 SQL 的接口,允许您读写 Hive 表,从而实现轻松的数据交换。
同时,Impala 使 Hadoop 上的 SQL 操作非常快速和高效,允许在大数据分析研究项目中使用此 DBMS。 只要有可能,Impala 就会与现有的 Apache Hive 基础设施一起工作,该基础设施已经用于执行长时间运行的 SQL 批处理查询。
此外,Impala 将其表定义存储在 Metastore(传统的 MySQL 或 PostgreSQL 数据库)中,即与 Hive 存储类似数据的位置相同。 只要所有列都使用 Impala 支持的数据类型、文件格式和压缩编解码器,它就允许 Impala 访问 Hive 表。
Hive 与 Impala:差异

编程语言
Hive 是用 Java 编写的,而 Impala 是用 C++ 编写的。 然而,Impala 也使用一些基于 Java 的 Hive UDF。
用例
数据工程师在 ETL 过程(提取、转换、加载)中使用 Hive,例如,在大型数据集上进行长时间运行的批处理作业,例如,在旅行聚合器和机场信息系统中。 反过来,Impala 主要面向分析师和数据科学家,主要用于商业智能等任务。
表现
Impala实时执行SQL查询,而Hive的特点是数据处理速度慢。 通过简单的 SQL 查询,Impala 的运行速度可以比 Hive 快 6-69 倍。 但是,Hive 可以更好地处理复杂查询。
延迟/吞吐量
Hive 的吞吐量明显高于 Impala。 LLAP(Live Long and Process)特性支持内存中的查询缓存,为 Hive 提供了良好的低级性能。
LLAP 包括长期系统服务(守护进程),它允许您直接与 HDFS 数据节点交互并取代紧密集成的 DAG 查询结构(有向无环图)——一种在大数据计算中广泛使用的图形模型。
容错性
Hive 是一个容错系统,可以保留所有中间结果。 它还对可伸缩性产生积极影响,但会导致数据处理速度下降。 反过来,Impala 不能称为容错平台,因为它更多地受内存限制。
代码转换
Hive 在编译时生成查询表达式,而 Impala 在运行时生成它们。 Hive 的特点是在应用程序首次启动时存在“冷启动”问题; 由于需要与数据源建立连接,查询转换缓慢。
Impala 没有这种启动开销。 用于处理 SQL 查询的必要系统服务(守护进程)在启动时启动,从而加快了工作速度。
存储支持
Impala 支持 LZO、Avro 和 Parquet 格式,而 Hive 支持纯文本和 ORC。 但是,两者都支持 RCFIle 和 Sequence 格式。
阿帕奇蜂巢 | 阿帕奇黑斑羚 | |
语 | 爪哇 | C++ |
用例 | 数据工程 | 分析与分析 |
表现 | 对于简单查询高 | 比较低 |
潜伏 | 缓存导致更多延迟 | 潜伏较少 |
容错 | 由于 MapReduce,容忍度更高 | 由于 MPP,容忍度较低 |
转换 | 冷启动慢 | 更快的转换 |
存储支持 | 纯文本和 ORC | LZO、Avro、实木复合地板 |
最后的话
Hive 和 Impala 并不竞争,而是有效地互补。 尽管两者之间存在显着差异,但也有很多共同点,选择其中一个取决于项目的数据和特定要求。
您还可以探索 Hadoop 和 Spark 之间的直接比较。
.