在 CentOS 上优化 HDFS(Hadoop Distributed File System),通常从 系统层、JVM、HDFS 参数、磁盘与网络、业务使用方式 几个层面入手。下面给你一套可直接落地的优化思路,适用于生产环境。
Hadoop 不推荐用 swap,否则会导致 JVM GC 变慢甚至节点假死。
# 临时关闭
swapoff -a
# 永久关闭(注释 swap 行)
vim /etc/fstab
HDFS 会打开大量文件。
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
验证:
ulimit -n
vim /etc/sysctl.conf
常用优化项:
vm.swappiness = 0
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
生效:
sysctl -p
cat /sys/block/sda/queue/scheduler
临时修改:
echo deadline > /sys/block/sda/queue/scheduler
export HADOOP_NAMENODE_OPTS="-Xms8g -Xmx8g -XX:+UseG1GC"
export HADOOP_DATANODE_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC"
建议
适合大文件场景:
<property>
<name>dfs.blocksize</name>
<value>268435456</value> <!-- 256MB -->
</property>
小文件非常多时,反而要小一点(如 64MB)。
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
生产环境推荐 3,不要盲目提高。
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>64</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data1/dfs,/data2/dfs,/data3/dfs</value>
</property>
✅ 每个磁盘单独挂载
✅ 不要 RAID(HDFS 自己做冗余)
<property>
<name>dfs.datanode.fsdataset.volume.choosing.policy</name>
<value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>
</property>
vim /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
HDFS 对:
renamehdfs dfs -ls /bigdir性能不友好。
hdfs dfs -Ddfs.blocksize=268435456 -put
工具:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar TestDFSIO \
-write -nrFiles 10 -fileSize 128MB
| 节点类型 | CPU | 内存 | 磁盘 |
|---|---|---|---|
| NameNode | 8+ | 16G+ | SSD |
| DataNode | 8+ | 8G+ | 多块 HDD |
CentOS 上优化 HDFS = 系统稳定 + JVM 合理 + 参数匹配业务 + 磁盘多块 + 减少小文件
如果你愿意,可以告诉我:
我可以帮你 给出一份针对你场景的 HDFS 优化配置。