在 CentOS 上优化 HDFS(Hadoop Distributed File System),一般从 操作系统、JVM、HDFS 参数、硬件、集群架构 五个方面入手。下面给你一套比较完整的优化思路(适用于生产环境,也适合调优学习)。
HDFS 会打开大量文件,必须调大:
# 查看
ulimit -n
# 修改
vi /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
Swap 会导致 HDFS 性能剧烈下降:
swapoff -a
永久禁用:
vi /etc/fstab
# 注释 swap 行
vi /etc/sysctl.conf
建议配置:
vm.swappiness = 0
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
fs.file-max = 1000000
sysctl -p
HDFS 对磁盘顺序读写敏感:
# 查看
cat /sys/block/sda/queue/scheduler
# 设置为 deadline 或 noop
echo deadline > /sys/block/sda/queue/scheduler
export HADOOP_NAMENODE_OPTS="-Xms8g -Xmx8g -XX:+UseG1GC"
export HADOOP_DATANODE_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC"
✅ 生产环境建议使用 G1 GC,避免 Full GC
以下配置在 hdfs-site.xml 中修改。
大文件场景:
<property>
<name>dfs.blocksize</name>
<value>268435456</value> <!-- 256MB -->
</property>
小文件场景:
<property>
<name>dfs.blocksize</name>
<value>67108864</value> <!-- 64MB -->
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
冷数据可降低到 2,热点数据保持 3
<property>
<name>dfs.namenode.handler.count</name>
<value>64</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>32</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>104857600</value> <!-- 100MB/s -->
</property>
强烈推荐开启(提升本地读性能)
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
并且:
<property>
<name>dfs.domain.socket.path</name>
<value>/var/run/hadoop-hdfs/dn._PORT</value>
</property>
<property>
<name>dfs.client.file-write-buffer-size</name>
<value>131072</value>
</property>
小文件是 HDFS 性能杀手,解决方案:
| 角色 | CPU | 内存 | 磁盘 |
|---|---|---|---|
| NameNode | 8+ | 32G+ | SSD |
| DataNode | 8+ | 16G+ | 多块 HDD |
| JournalNode | 4 | 8G | SSD |
dfs.datanode.data.dir
/data1/dfs/dn,/data2/dfs/dn,/data3/dfs/dn
hdfs balancer -threshold 10
hdfs dfsadmin -report
hdfs dfs -expunge
| 问题 | 原因 |
|---|---|
| HDFS 卡顿 | NameNode GC |
| 写入慢 | 磁盘慢 / 网络 |
| 读取慢 | 副本不均衡 |
| 小文件多 | NameNode 内存高 |
CentOS 优化 HDFS 的核心:系统参数 + JVM GC + HDFS 块 & 副本 & 本地读 + 磁盘策略 + 小文件治理
如果你愿意,我可以根据你的 集群规模(几台机器?数据量?) 或 具体场景(读写多?实时?离线?) 给你一套 定制级 HDFS 配置模板。