一句话总结:
Hive 是数仓 SQL 工具,本身不做计算;
YARN 是 Hadoop 的资源调度管理器,给 Hive 的计算任务分配服务器资源,运行 MapReduce/Tez/Spark 计算程序;
一、各自角色
1. Hive
- Hive 是数仓工具,提供 Hive‑SQL,把我们写的 SQL 语句,编译翻译成分布式计算任务(MR / Tez / Spark)。
- Hive 本身不做真正的数据计算,只负责:解析 SQL、生成执行计划、生成任务。
- Hive 自己不管理 CPU、内存服务器资源。生成完任务之后,把任务提交给 YARN 去运行。
2. YARN
YARN 是 Hadoop 集群的资源调度框架。
负责整个集群机器的 CPU、内存资源管理;
接收各类应用提交的任务,分配 Container 容器,调度任务在各个节点运行,监控任务运行、失败重启。
不止 Hive 可以用 YARN,Spark、Flink、MR 程序都可以提交到 YARN 上跑。
二、完整执行流程(Hive on MapReduce 最经典)
- 用户写一条 Hive SQL,在 hive 客户端执行;
- Hive 解析、编译 SQL,生成 MapReduce 作业;
- Hive 客户端把这个 MR 作业提交给 YARN ResourceManager;
- RM 根据集群资源情况,分配 Container 容器;
- 在容器里面启动 Map Task、Reduce Task,读取 HDFS 上的数据做计算;
- 计算完成,结果写回 HDFS,Hive 拿到结果返回给客户端。
Hive 就像项目经理,写好施工方案;
YARN 是工地总管,分配工人机器资源,真正干活;
三、形象比喻
- Hive:翻译官,把 SQL 翻译成分布式任务说明书。
- YARN:工厂调度,分配机器内存 CPU,启动 task 真正干活。
- HDFS:仓库,存放原始数据和计算结果。
四、常见部署模式
- Hive‑on‑MR:SQL 编译成 MapReduce 任务,提交 YARN 运行(老常用)
- Hive‑on‑Tez:编译成 Tez 任务,提交 YARN
- Hive‑on‑Spark:编译 Spark 任务,提交 YARN
不管底层是 MR/Tez/Spark,资源全部由 YARN 统一调度。
五、重要区分
- Hive 不存储数据,数据存在HDFS;
- Hive 不调度资源,资源交给YARN;
- Hive 元数据(表名、分区、字段)存在MySQL 元数据库 Metastore;
六、精简版
Hive 是 Hadoop 上的数据仓库工具,提供 Hive‑SQL。Hive 本身不执行计算,它会把 SQL 解析编译成 MapReduce、Tez 或者 Spark 任务。
YARN 是 Hadoop 的资源调度框架,负责集群 CPU、内存资源管理。
Hive 将生成的计算作业提交给 YARN,由 YARN 分配 Container 容器,调度 Map、Reduce Task 在集群节点执行计算。
Hive 负责 SQL 解析生成计划,YARN 负责资源调度和实际任务运行。
Hive 的数据存储在 HDFS,元数据存放在 MySQL。
七、高频Q&A
Q:Hive 任务卡住,一定是 Hive 本身问题吗?
A:不一定。
- 如果任务还没提交 YARN:卡在 Hive 编译、Metastore 元数据查询;
- 如果任务已经提交 YARN:问题基本出在 YARN 侧:资源不足、数据倾斜、HDFS 读写异常。
Q:如果 YARN 挂了,Hive 还能用吗?
A:不能执行查询计算;只能做简单 show tables 这类元数据查询;所有需要计算的 SQL 全部无法运行。