在 Linux 上配置 HDFS 内存,通常指两件事之一,先帮你区分清楚:
下面分别说明。
HDFS 的核心进程:
文件位置(CDH/HDP/原生 Hadoop 类似):
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
export HADOOP_NAMENODE_OPTS="-Xms4g -Xmx4g"
export HADOOP_DATANODE_OPTS="-Xms2g -Xmx2g"
export HADOOP_SECONDARYNAMENODE_OPTS="-Xms2g -Xmx2g"
export HADOOP_JOURNALNODE_OPTS="-Xms1g -Xmx1g"
⚠️ 生产环境建议 Xms = Xmx,避免 GC 抖动
| 文件/块数量 | 推荐 NameNode 内存 |
|---|---|
| 1000万块 | 8–16 GB |
| 5000万块 | 32–64 GB |
| 1亿块 | 64–128 GB |
块越多,NameNode 越吃内存。
stop-dfs.sh
start-dfs.sh
查看:
jps
jmap -heap <pid>
ulimit -a
修改:
/etc/security/limits.conf
示例:
hadoop soft memlock unlimited
hadoop hard memlock unlimited
示例(systemd):
[Service]
MemoryLimit=16G
❌ NameNode OOM
→ 内存太小或块太多
❌ DataNode 频繁 GC
→ -Xmx 太小
❌ 修改不生效
→ 改错 hadoop-env.sh 或没重启
hadoop-env.shjmap 确认内存如果你能告诉我:
我可以给你精准配置值。