在 Debian 上部署 Hadoop(HDFS / YARN) 时,“内存怎么设”主要分 系统层面 和 Hadoop 配置层面 两部分。下面按 实际生产/实验常用做法 说明,适用于 Debian 10/11/12。
free -h
cat /proc/meminfo
假设你的机器内存为:
Hadoop 官方建议 少用 swap
swapoff -a
永久关闭:
vim /etc/fstab
# 注释 swap 行
vim /etc/sysctl.conf
添加:
vm.swappiness=10
生效:
sysctl -p
Hadoop 内存主要由 YARN 管理,而不是 HDFS。
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>12288</value> <!-- 给 YARN 用的内存(MB) -->
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
✅ 推荐经验值(假设 16G 内存)
| 项目 | 值 |
|---|---|
| NodeManager 内存 | 12–14 GB |
| 单个 Container 最大 | 8 GB |
| 最小 | 1 GB |
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1536m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3072m</value>
</property>
⚠️ 规则
java.opts < memory.mb
NameNode 内存主要看 文件数量
export HADOOP_NAMENODE_OPTS="-Xmx4096m"
export HADOOP_HEAPSIZE=2048
export HADOOP_NAMENODE_OPTS="-Xmx4096m"
export HADOOP_DATANODE_OPTS="-Xmx2048m"
export YARN_RESOURCEMANAGER_HEAPSIZE=4096
export YARN_NODEMANAGER_HEAPSIZE=2048
YARN NodeManager: 12G
Container Max: 8G
Map: 2G
Reduce: 4G
系统预留: 2–3G
YARN NodeManager: 6G
Container Max: 4G
Map: 1G
Reduce: 2G
yarn node -list
yarn node -status <nodeId>
❌ Container killed by YARN for exceeding memory
✅ 原因:mapreduce.java.opts 大于 memory.mb
❌ Hadoop 启动后系统卡死
✅ 原因:YARN 内存 + 系统内存耗尽
如果你愿意,可以告诉我:
我可以直接给你一套 可直接复制的配置文件。