在 CentOS 上运行 HDFS 时出现“速度慢”的问题,通常不是单一原因,而是系统、网络、HDFS 配置、硬件等多方面叠加导致的。下面按常见原因分类说明,并给出排查和优化建议。
CentOS 默认可能协商成 100Mbps 或半双工。
排查:
ethtool eth0
看 Speed 和 Duplex。
解决:
ethtool -s eth0 speed 1000 duplex full autoneg off
(或检查交换机)
CentOS 默认开启 firewalld 和 SELinux,会严重影响 RPC 性能。
检查:
systemctl status firewalld
getenforce
建议(测试环境):
systemctl stop firewalld
setenforce 0
HDFS 对延迟敏感。
ping namenode
iperf -c datanode
HDFS 写数据会:
排查:
iostat -x 1
看 %util 和 await
优化:
mount -o noatime /dev/sdb /data
HDD 推荐 deadline,SSD 推荐 noop
cat /sys/block/sdb/queue/scheduler
修改:
echo deadline > /sys/block/sdb/queue/scheduler
小集群或测试环境可改为 1~2。
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
默认 128MB,小文件多会非常慢。
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
GC 频繁导致卡顿。
jstat -gcutil <pid> 1000
建议:
HDFS 会打开大量文件。
ulimit -n
修改:
* soft nofile 65536
* hard nofile 65536
free -m
swapon -s
建议:
sysctl vm.swappiness=10
Hadoop 官方明确不建议开启。
cat /sys/kernel/mm/transparent_hugepage/enabled
关闭:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
hadoop fs -put 而非 distcpethtool 看网卡iostat 看磁盘dfs.replication如果你愿意,可以告诉我:
我可以给你一套针对性的优化方案。