在 Linux 环境下 HDFS 读速度慢,通常不是单一原因,而是客户端、网络、HDFS 配置、磁盘、集群状态多方面叠加。下面按最常见 → 较少见系统说明,并给出排查方法。
HDFS 读慢,最常见是 读的不是本地节点。
表现
iftop 看到大量跨节点流量排查
hdfs fsck /path -files -blocks -locations
看 block 所在节点是否包含客户端节点。
优化
dfs.client.read.shortcircuit=true默认情况下,即使本地有数据,也可能走 TCP。
未开启时
开启方式(hdfs-site.xml)
<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 是带宽敏感型系统
常见问题:
排查
ethtool eth0
iftop
netstat -i
建议
默认:
dfs.client.read.parallelism=1
大文件顺序读可提升
dfs.client.read.parallelism=4~8
NameNode 或 DataNode 繁忙:
dfs.namenode.handler.count 太小监控
Slow read processorHDFS 读最终还是落磁盘:
排查
iostat -x 1
优化
blockdev --setra 4096 /dev/sdX
Linux 不缓存 HDFS 数据:
DataNode / 客户端 GC 停顿:
表现
GC pause正确方式
DistributedCachehadoop fs -cat 小文件循环FSDataInputStream# 1. 看块位置
hdfs fsck /path -files -blocks -locations
# 2. 是否本地读
netstat -anp | grep DataNode
# 3. 网络
iftop
# 4. 磁盘
iostat -x 1
# 5. 客户端配置
grep shortcircuit hdfs-site.xml
HDFS 读慢 = 非本地读 + 网络瓶颈 + 配置不当 + 小文件
如果你愿意,可以告诉我:
我可以直接给你针对性调优参数。