在 CentOS 上部署和调优 HDFS(Hadoop Distributed File System),通常需要从操作系统层面、Hadoop 参数配置、硬件资源、网络几个维度入手。下面给你一套比较系统、可落地的 HDFS 调优思路(以常见生产环境为例,Hadoop 3.x 为主,2.x 也基本适用)。
HDFS(尤其是 NameNode、DataNode)会打开大量文件。
# 查看
ulimit -n
ulimit -u
# 修改 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
避免 JVM GC 时触发 swap 导致延迟飙升。
swapoff -a
# 永久禁用:注释 /etc/fstab 中 swap 行
mount -o noatime,nodiratime /dev/sdb /data
/etc/fstab 示例:
/dev/sdb /data xfs noatime,nodiratime 0 0
# /etc/sysctl.conf
net.core.somaxconn = 4096
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_tw_reuse = 1
sysctl -p
<!-- 处理 RPC 的线程数 -->
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<!-- 编辑日志滚动 -->
<property>
<name>dfs.namenode.edits.dir</name>
<value>/data/nn/edits</value>
</property>
经验值:
handler.count ≈ 20 × log2(集群节点数)
<property>
<name>dfs.datanode.handler.count</name>
<value>20</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.blocksize</name>
<value>134217728</value> <!-- 128MB(大文件可 256MB) -->
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
小文件多 → 块小(64MB)
大文件 / 分析型 → 块大(256MB)
export HADOOP_NAMENODE_OPTS="-Xms8g -Xmx8g -XX:+UseG1GC"
export HADOOP_DATANODE_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC"
推荐:
<property>
<name>dfs.datanode.data.dir</name>
<value>/data1/dfs,/data2/dfs,/data3/dfs</value>
</property>
# CentOS 7
echo deadline > /sys/block/sdb/queue/scheduler
| 问题 | 调优方向 |
|---|---|
| NameNode 卡顿 | 增加 handler、升级 GC |
| 写入慢 | 增大 bandwidth、块大小 |
| 小文件过多 | 合并文件 / HAR / HBase |
| 网络瓶颈 | 万兆网卡 + 调 TCP 参数 |
| DataNode 掉线 | 调 heartbeat.recheck |
hdfs dfsadmin -report
hdfs dfs -df -h
建议配合:
如果你愿意,可以告诉我:
我可以直接给你一套可直接用的配置模板。