在 Linux 上调整 HDFS(Hadoop 分布式文件系统)相关内存配置,通常是从 JVM 堆内存 和 Hadoop 参数 两个层面来做。下面按「常见组件 + 配置位置 + 调整方法」说明。
HDFS 主要进程:
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
# NameNode
export HADOOP_NAMENODE_OPTS="-Xmx4g -Xms4g"
# DataNode
export HADOOP_DATANODE_OPTS="-Xmx2g -Xms2g"
# SecondaryNameNode
export HADOOP_SECONDARYNAMENODE_OPTS="-Xmx2g -Xms2g"
# JournalNode
export HADOOP_JOURNALNODE_OPTS="-Xmx1g -Xms1g"
✅ 建议:
NameNode 内存主要消耗在:
经验公式:
内存 ≈ 文件数 × 150~300 Byte
例如:
<property>
<name>dfs.namenode.handler.count</name>
<value>20</value>
</property>
集群节点数 × 2<property>
<name>dfs.datanode.handler.count</name>
<value>10</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
⚠️ max.transfer.threads 太低会导致 DataNode OOM 或卡死
ulimit -n 65536
永久配置:
/etc/security/limits.conf
hdfs soft nofile 65536
hdfs hard nofile 65536
swapoff -a
或降低 swappiness:
sysctl vm.swappiness=10
-Xmx 设置太小max.transfer.threads 太小| 角色 | 堆内存 |
|---|---|
| NameNode | 8G |
| SecondaryNameNode | 4G |
| DataNode | 2G |
| JournalNode | 1G |
如果你能告诉我:
我可以给你 更精确的内存参数建议。