在 CentOS 上调整 HDFS(Hadoop)内存,通常是从 JVM 堆内存 和 系统/资源参数 两个层面来做。下面按常见场景说明。
HDFS 主要涉及两个 JVM 进程:
它们的内存通过 Hadoop 的 环境变量 控制。
编辑:
/etc/hadoop/hadoop-env.sh
或(CDH/HDP 可能不同):
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
export HADOOP_NAMENODE_OPTS="-Xms4g -Xmx4g -XX:MaxHeapFreeRatio=70"
示例说明:
-Xms4g:初始堆内存 4G-Xmx4g:最大堆内存 4G(生产建议一样)export HADOOP_DATANODE_OPTS="-Xms2g -Xmx2g"
-XX:+UseG1GC
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/hadoop/hdfs_dump.hprof
free -h
ulimit -a
如需修改:
vi /etc/security/limits.conf
示例:
hdfs soft memlock unlimited
hdfs hard memlock unlimited
<property>
<name>dfs.namenode.handler.count</name>
<value>20</value>
</property>
handler 数越多,NameNode 占用内存越高
stop-dfs.sh
start-dfs.sh
或系统服务方式(如 systemd):
systemctl restart hadoop-hdfs-namenode
systemctl restart hadoop-hdfs-datanode
| 节点类型 | 内存建议 |
|---|---|
| NameNode | 4G~32G(视元数据量) |
| DataNode | 2G~8G |
| 小集群 | NameNode 4G 足够 |
NameNode 内存 ≈ 元数据量 × 约 150~300 字节
-Xmxdfs.namenode.handler.count-Xmx如果你能告诉我:
我可以给你 更精确的配置示例。