在 Linux 环境下 HDFS 读取缓慢 通常不是单一原因,而是客户端、网络、HDFS 配置、集群状态、磁盘/OS 多方面叠加。下面按常见原因 → 排查方法 → 解决建议系统说明。
排查
iftop
sar -n DEV 1
解决
现象
解决
distcp 批量读如果客户端和 DataNode 在同一节点却走网络:
检查
hdfs getconf -confKey dfs.client.read.shortcircuit
建议开启
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
检查
hdfs fsck /path -files -blocks -locations
解决
topology.script解决
排查
iostat -x 1
dmesg | grep error
解决
dfs.datanode.max.transfer.threads解决
hdfs balancerulimit -n
HDFS 客户端可能受限
解决
* soft nofile 65536
* hard nofile 65536
tcp_tw_reuse优化示例
net.ipv4.tcp_tw_reuse = 1
net.core.rmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
检查
free -h
hdfs dfs -cat 大文件建议
hdfs dfs -get 到本地建议
# 是否本地读
hdfs getconf -confKey dfs.client.read.shortcircuit
# 网络
iftop / sar -n DEV
# 磁盘
iostat -x 1
# NameNode 压力
jstat -gc <nn_pid>
# block 位置
hdfs fsck /path -files -blocks -locations
如果你愿意,可以提供:
我可以帮你精准定位是哪一类瓶颈。