在 CentOS 上优化 HDFS(Hadoop Distributed File System)性能,通常可以从 操作系统层、HDFS 参数配置、硬件与网络、以及使用方式 四个方面入手。下面给你一套实用、可落地的优化方案。
# 临时关闭
setenforce 0
# 永久关闭(重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
或只开放 Hadoop 端口(如 8020、50070、50010 等)
HDFS 会打开大量文件:
cat >> /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
EOF
swapoff -a
# 永久禁用
sed -i '/swap/s/^/#/' /etc/fstab
# 查看当前调度
cat /sys/block/sd*/queue/scheduler
# 建议设置为 deadline 或 noop
echo deadline > /sys/block/sda/queue/scheduler
写入 /etc/rc.local 保证重启生效。
大文件场景:
<property>
<name>dfs.blocksize</name>
<value>256m</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
性能优先可降低为 2,可靠性优先保持 3
<property>
<name>dfs.namenode.handler.count</name>
<value>40</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>20</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
HDFS 对网络带宽非常敏感。
<property>
<name>dfs.datanode.data.dir</name>
<value>/data1/dfs,/data2/dfs,/data3/dfs</value>
</property>
✅ 推荐:JBOD
❌ 不推荐:RAID5(写放大严重)
mkfs.xfs /dev/sdb
export HADOOP_NAMENODE_OPTS="-Xmx8g -XX:+UseG1GC"
export HADOOP_DATANODE_OPTS="-Xmx4g -XX:+UseG1GC"
<property>
<name>dfs.client.write.packet.size</name>
<value>65536</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
hdfs dfsadmin -reportiostat -x 1dstat| 场景 | 优化点 |
|---|---|
| 写入慢 | 多磁盘 + 大 block + 网络 |
| 读取慢 | 短路读 + 副本均衡 |
| NameNode 卡 | 增加内存 + 小文件治理 |
| DataNode 忙 | 提高 handler / transfer threads |
如果你愿意,可以告诉我:
我可以给你一套针对性配置模板。