📘 1. 概要
Hive on MR(MapReduce)是传统企业数仓常见的部署方式。
调优主要围绕以下两部分展开:
-
YARN 资源配置(集群级)
-
MapReduce 资源配置(作业级)
同时辅以 Explain 执行计划分析,定位性能瓶颈。
⭐ 2. 计算资源配置
2.1 YARN 资源配置(集群级核心调优)
YARN 提供资源管理与调度服务,因此其 CPU、内存配置直接影响 Hive/MR 性能。
2.1.1 YARN 核心参数说明
以下为企业中最常调整的四个关键参数👇
1)yarn.nodemanager.resource.memory-mb
含义:每个 NodeManager 节点可分配给 Container 的总内存。
配置依据:
-
服务器内存总量(如 128G/256G)
-
节点上是否部署 HDFS、ZK、ES 等其他服务
示例(64G 内存用于 YARN):
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>65536</value>
</property>
2)yarn.nodemanager.resource.cpu-vcores
含义:NodeManager 允许 Container 使用的 CPU 核数。
示例(每台机器分配 16 CPU 核给 YARN):
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
3)yarn.scheduler.maximum-allocation-mb
含义:单个 Container 最大可申请内存。
-
通常设置为 16GB 左右
-
超过此值 Map/Reduce 任务无法申请大内存容器
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
</property>
4)yarn.scheduler.minimum-allocation-mb
含义:Container 最小单位内存(步长单位)。
-
常见配置:512MB
-
调度时内存以该步长向上取整
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
2.1.2 YARN 配置应用步骤(实操)
-
修改配置文件
$HADOOP_HOME/etc/hadoop/yarn-site.xml -
增加如下内容:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>65536</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
-
分发配置
-
重启 YARN
2.2 MapReduce 资源配置(作业级调优)
MR 调优主要决定单条 Hive SQL 的运行效率。
核心配置:Map / Reduce 的 内存 与 CPU 核数。
2.2.1 Map Task 资源配置
1)mapreduce.map.memory.mb(Map 内存)
含义:单个 Map Task 的 Container 内存大小
默认值:1024MB(偏小)
注意:
-
不能超过
yarn.scheduler.maximum-allocation-mb -
不能低于
yarn.scheduler.minimum-allocation-mb
Hive 中可按 SQL 单独配置:
set mapreduce.map.memory.mb=2048;
2)mapreduce.map.cpu.vcores(Map CPU 核数)
含义:单个 Map Task 使用的 CPU 核数
默认值:1,一般无需调整。
2.2.2 Reduce Task 资源配置
1)mapreduce.reduce.memory.mb(Reduce 内存)
与 Map 类似,但 Reduce 阶段通常更耗内存,需要适当调大。
Hive SQL 中单独设置:
set mapreduce.reduce.memory.mb=2048;
2)mapreduce.reduce.cpu.vcores
同 Map,通常为 1,不常调整。
🔥 企业实战建议(经验总结)
⭐ 3. Explain 执行计划(定位性能瓶颈的核心工具)
Explain 用于展示 Hive SQL 语句将被如何翻译成 MR Job,包括:
-
MapReduce 阶段划分
-
Operator 执行逻辑树
-
IO 读写路径
-
表和分区扫描情况
3.1 Explain 输出解析
Explain 输出由多个 Stage 组成:
-
每个 Stage 代表一个 MR Job 或文件系统操作
-
Stage 间具有依赖关系(DAG)
🔍 Map/Reduce 阶段核心结构
1)Map Operator Tree(Map 端执行逻辑)
包括:
-
TableScan
-
Filter
-
Select
-
MapJoin
-
Group By(部分聚合)
2)Reduce Operator Tree(Reduce 端执行逻辑)
包括:
-
Join
-
Group By
-
Reduce Sink
-
File Output
3.2 常见 Operator 说明表
3.3 Explain 基本语法
EXPLAIN [FORMATTED | EXTENDED | DEPENDENCY] query;
参数说明:
📌 总结
企业级调优主要从三方面入手:
✔ 1. 集群层(YARN)
合理分配 CPU、内存,避免资源浪费与不足。
✔ 2. 作业层(MapReduce)
根据 SQL 复杂度动态调整 Map/Reduce 内存和 CPU。
✔ 3. SQL 层(Explain)
分析执行计划定位优化点(过滤是否下推、是否出现多余 MR 阶段等)。