按「定义→架构→流程→核心概念→生产配置」梳理。
一、Hive 核心定义
- 定位:Hive 是 Facebook 开源的、基于 Hadoop 的数据仓库工具,提供类 SQL(HQL)查询能力,将结构化数据文件映射为表。
- 本质:Hive 是 Hadoop 的客户端工具,自身不存储数据、不执行计算;核心能力是「SQL 翻译 + 元数据管理」。
- 底层依赖:数据存储在 HDFS,计算默认由 MapReduce 实现(可切换为 Spark / Tez),任务运行在 Yarn 上。
二、四大核心架构模块
1. Client(用户接口层)
- 作用:接收用户提交的 HQL,作为访问 Hive 的入口。
- 两种形式:CLI(命令行终端,本地调试用)、JDBC/ODBC(远程访问,生产环境通过 HiveServer2 服务代理访问)。
- 重点:HiveServer2 是生产环境的访问代理,负责权限控制、远程连接管理。
2. Metastore(元数据中心)
- 作用:存储所有元数据,包括库名、表名、字段定义、分区信息、数据在 HDFS 的存储路径、表类型等。
- 核心价值:Hive 读写数据的「目录索引」,Driver 执行 SQL 前必须先查询 Metastore 才能定位数据。
- 存储介质:
- 默认:Derby 嵌入式数据库,仅支持单客户端访问,只适合本地测试。
- 生产标准:MySQL,支持多客户端并发访问,满足多人协作开发。
3. Driver(SQL 翻译执行器)
- 作用:将 HQL 字符串一步步转化为可在 Hadoop 上运行的计算任务,是 Hive 的「大脑」。
- 执行三大阶段: ① 解析阶段 :SQL Parser 生成抽象语法树(AST),Semantic Analyzer 做语义校验(表/字段合法性、权限校验)。 ② 优化阶段 :生成逻辑计划 → 逻辑优化(如谓词下推)→ 生成物理计划 → 物理优化(如 Join 算法选择、并行度调整)。 ③ 执行阶段:Execution 执行器将最终物理计划提交给 Yarn 启动任务。
4. Hadoop 层(存储计算底座)
- 存储:HDFS,Hive 一张表对应 HDFS 一个目录,数据以文件形式存储。
- 计算:默认 MapReduce,可切换 Spark / Tez 等引擎。
- 调度:Yarn 负责资源分配与任务调度。
三、一条 HQL 的完整执行流程
- 用户通过 Client 提交 HQL 语句到 HiveServer2。
- Driver 接收语句,进行语法解析,生成抽象语法树。
- 语义分析器校验表、字段、权限,校验通过后继续。
- Driver 访问 Metastore,查询 SQL 涉及表的元数据(存储路径、结构等)。
- 生成逻辑执行计划,经过逻辑优化后生成物理执行计划。
- 执行器将物理计划提交给 Yarn,启动 MapReduce 任务去 HDFS 读写数据、完成计算。
- 计算结果返回 HDFS,再经 Driver 逐层返回给客户端。
四、核心概念辨析
1. 逻辑计划 vs 物理计划
- 逻辑计划:描述「要做什么操作」,只定义步骤(扫描→过滤→分组→聚合),和底层计算引擎无关。
- 物理计划:描述「具体怎么跑」,绑定具体计算引擎,定义 Map/Reduce 数量、Shuffle 方式、Join 算法等。
2. 内部表 vs 外部表
- 内部表(管理表):Hive 完全管理元数据和数据文件,删除表时 HDFS 数据同步删除。
- 外部表:Hive 只管理元数据,数据文件由外部系统管理;删除表时只删元数据,不删 HDFS 数据;适合多工具共享数据的场景。
五、生产环境标准配置
- Metastore 采用独立服务模式 + MySQL 存储,支持多用户并发。
- 通过 HiveServer2 提供远程 JDBC 访问,开启用户模拟做权限隔离。
- 计算引擎可切换为 Spark / Tez 提升性能,MapReduce 为默认兜底。