Apache Hive 是建立在 Hadoop 之上的数据仓库工具,它把SQL翻译成MapReduce/Tez/Spark任务,让你用类SQL语言(HiveSQL)查询海量存储在HDFS上的数据,不是数据库。
核心定位:数仓,不是OLTP数据库,不做实时增删改,主打海量离线分析。
通俗理解
- HDFS:存海量原始文件(日志、业务数据),就像硬盘,只会存文件,不会做查询。
- Hive:给HDFS套一层SQL外壳。你写
select * from table,Hive把SQL转成分布式计算任务,跑在YARN集群上,扫描HDFS文件返回结果。 - Hive本身不存真实数据:
- 元数据(表名、字段、分区、存储路径)存在 Metastore(通常存MySQL)
- 真实数据仍然放在 HDFS
三大核心组件
- Metastore(元数据服务) 保存库、表、分区、字段、表对应HDFS路径。
Hive查表,就是去Metastore查这个表对应HDFS哪个目录,再扫描目录下文件。
- HiveServer2(HS2)
对外提供JDBC/Thrift服务,供
beeline、DataGrip、Superset 等客户端远程连接。端口默认10000。
前面讲的 beeline 就是HS2的客户端。
- Driver驱动器 解析SQL → 生成执行计划 → 提交给YARN(Spark/Tez/MapReduce)执行。
Hive 的表类型
1. 内部表(管理表 MANAGED_TABLE)
Hive管理生命周期,drop表时:元数据+HDFS数据一起删除。一般不建议放原始数据。
2. 外部表(EXTERNAL_TABLE)⭐生产最常用
建表指定 location 'hdfs://xxx'。
drop table 只删元数据,HDFS原始文件不动。
生产数仓几乎全部用外部表,防止误删丢数据。
3. 分区表 Partitioned
按时间/地区分区,例如按dt日期分区。查询加where dt='2026‑08‑10',只扫描对应分区文件夹,大幅减少扫描数据量,提速。
4. 分桶表 Bucket
把数据哈希打散到若干文件,提升join、抽样性能,现在Spark用的多。
HiveSQL 特点
✅ 支持:select、join、group by、窗口函数、CTE、分区、UDF自定义函数 ❌ 不支持行级update/delete(旧版);只能分区删除/重写,适合离线批量分析,不适合实时业务。
Hive 3开始支持行级delete/update,但性能很差,几乎不用。
Hive 和 MySQL 的关键区别
| 对比项 | MySQL | Hive |
|---|---|---|
| 存储引擎 | 本地磁盘 | HDFS分布式存储 |
| 数据规模 | GB级,万~千万行 | TB‑PB级,百亿千亿行 |
| 计算模式 | 单机/少量节点 | 分布式YARN/Spark |
| 延迟 | 毫秒‑秒,实时查询 | 秒‑分钟,离线批量 |
| 更新 | 行级insert/update/delete | 批量重写,不适合单条修改 |
| 用途 | 业务OLTP数据库 | 离线数仓、大数据分析、报表 |
数据流完整链路
- 业务日志、数据同步到HDFS
- Hive建外部表映射HDFS文件
- 使用beeline/DataGrip写HiveSQL
- SQL提交HiveServer2,Driver解析,转为Spark任务提交YARN
- YARN集群扫描HDFS数据计算,结果返回客户端
和你上一问关联
beeline(客户端) → HiveServer2 → Hive Driver → Metastore(元数据MySQL) → HDFS(真实数据)
补充
- 现在很多公司已经用 Spark‑SQL 替代原生Hive执行引擎,元数据继续复用Hive Metastore。
- Hive 只做离线;实时数仓一般用 Doris、ClickHouse、Flink。
如果你需要,我可以给你极简Hive上手示例(建外部表、分区表、load数据)。