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

三大核心组件

  1. Metastore(元数据服务) 保存库、表、分区、字段、表对应HDFS路径。

Hive查表,就是去Metastore查这个表对应HDFS哪个目录,再扫描目录下文件。

  1. HiveServer2(HS2) 对外提供JDBC/Thrift服务,供 beeline、DataGrip、Superset 等客户端远程连接。端口默认10000。

前面讲的 beeline 就是HS2的客户端

  1. 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 的关键区别

对比项MySQLHive
存储引擎本地磁盘HDFS分布式存储
数据规模GB级,万~千万行TB‑PB级,百亿千亿行
计算模式单机/少量节点分布式YARN/Spark
延迟毫秒‑秒,实时查询秒‑分钟,离线批量
更新行级insert/update/delete批量重写,不适合单条修改
用途业务OLTP数据库离线数仓、大数据分析、报表

数据流完整链路

  1. 业务日志、数据同步到HDFS
  2. Hive建外部表映射HDFS文件
  3. 使用beeline/DataGrip写HiveSQL
  4. SQL提交HiveServer2,Driver解析,转为Spark任务提交YARN
  5. YARN集群扫描HDFS数据计算,结果返回客户端

和你上一问关联

beeline(客户端) → HiveServer2 → Hive Driver → Metastore(元数据MySQL) → HDFS(真实数据)

补充

  • 现在很多公司已经用 Spark‑SQL 替代原生Hive执行引擎,元数据继续复用Hive Metastore。
  • Hive 只做离线;实时数仓一般用 Doris、ClickHouse、Flink。

如果你需要,我可以给你极简Hive上手示例(建外部表、分区表、load数据)。