Apache Hive 是构建在 Hadoop 之上的数据仓库系统,让我们能够使用一种类似 SQL 的查询语言 HiveQL,来查询和分析存储在 HDFS 中的大规模数据集。它通过熟悉的查询语法让用户能够与结构化数据进行交互,从而抽象化了编写 MapReduce 代码的复杂性。
Apache Hive 的特性:
- 它是专为 Hadoop 构建的数据仓库工具。
- 能够将 HiveQL 查询转换为 MapReduce、Tez 或 Spark 作业。
- 允许与存储在 HDFS 中的结构化数据进行交互。
- 主要用于批处理和 ETL(提取、转换、加载)操作。
Apache Hive 架构
下图逐步展示了 Hive 与 Hadoop 协同工作时的作业执行流程。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250802122531024575/hivearchitecture.webp">hivearchitectureHive architecture
Hive 架构由以下核心组件构成:
1. 用户界面
- 提供了 CLI(命令行界面)、Hive Web UI、JDBC 和 ODBC 等工具,供用户提交 HiveQL 查询。
- 接收查询请求并将其传递给 Driver 进行处理。
2. 驱动器
- 管理 HiveQL 查询的整个生命周期。
- 通过与编译器、优化器和执行引擎交互,来协调查询的执行。
- 执行解析、验证和会话处理等任务。
3. 编译器
- 将 HiveQL 语句转换为执行计划。
- 将查询分解为 MapReduce/Tez/Spark 作业的有向无环图(DAG)。
- 通过转换和裁剪不必要的操作来优化逻辑执行计划。
4. 元数据存储
- 存储元数据信息(如表模式、数据类型、分区等)。
- 通常由关系型数据库(RDBMS)支持,例如 MySQL 或 PostgreSQL。
- 对于管理 Hive 的“读时模式”行为至关重要。
5. 执行引擎
- 执行经过优化的查询计划。
- 使用以下方式将逻辑任务转换为物理作业:
- MapReduce(默认)
- Apache Tez
- Apache Spark
- 与 Hadoop 交互,从 HDFS 获取并处理数据。
6. HDFS(Hadoop 分布式文件系统)
- Hive 表所在的实际存储层。
- 数据以 Text、ORC、Parquet、Avro 等格式存储。
Hive 的工作原理
下面让我们一步步深入了解 Hive 的工作流程:
- 执行查询: Hive 的接口(如命令行或 Web 用户界面)将查询发送给驱动器去执行。在这个阶段,UI 会调用驱动器的执行接口,例如通过 ODBC 或 JDBC。
- 获取计划: 驱动器为该查询设计一个会话句柄,并将查询传输给编译器以制定执行计划。换句话说,驱动器与编译器进行了交互。
- 获取元数据: 在此阶段,编译器向数据库发送元数据请求,并从 Metastore 获取必要的元数据。
- 发送元数据: Metastore 将元数据作为确认发送回编译器。
- 发送计划: 编译器将生成的执行计划发送给驱动器,以便执行查询。
- 执行计划: 执行引擎利用 MapReduce、Tez 或 Spark 来运行该计划。
- 返回结果: 最终结果通过接口返回给用户。
支持的存储格式
Hive 支持多种存储格式:
- Text File(文本文件)
- Sequence File(序列文件)
- RCFile
- ORC
- Parquet
- Avro
Hive 执行引擎
Hive 主要有三种执行引擎:
- MapReduce: 传统引擎(速度较慢但稳健可靠)。
- Tez: 基于 DAG(有向无环图)的引擎,速度比 MapReduce 快。
- Spark: 利用内存计算以提供更佳性能的引擎。
Hive Metastore 与 HDFS 的对比
Hive Metastore
—
存储元数据
RDBMS(MySQL, Derby 等)
表结构、分区信息
Driver、Compiler