在 CentOS 上“调优 HDFS 参数”通常分为 操作系统层(CentOS) 和 HDFS 配置层(hdfs-site / core-site) 两部分。下面给你一套实战向的调优清单,适合生产环境参考。
HDFS 大量使用文件句柄。
# 查看
ulimit -n
# 修改(/etc/security/limits.conf)
* soft nofile 65536
* hard nofile 65536
重新登录或重启生效。
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
(如必须开防火墙,放行 50070 / 8020 / 50010 / 50020 等)
# 查看
cat /sys/block/sdX/queue/scheduler
# 设置为 deadline(CentOS 7)
echo deadline > /sys/block/sdX/queue/scheduler
永久生效(grub):
elevator=deadline
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
hadoop-env.sh
export HADOOP_NAMENODE_OPTS="-Xmx8g -Xms8g"
export HADOOP_DATANODE_OPTS="-Xmx4g -Xms4g"
建议:
<property>
<name>dfs.blocksize</name>
<value>268435456</value> <!-- 256MB -->
</property>
适用:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>20</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>40</value>
</property>
<property>
<name>dfs.client.write.packet.size</name>
<value>65536</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
HDFS 最怕小文件:
hdfs dfsadmin -report
hdfs dfs -df -h
监控:
| 场景 | 建议 |
|---|---|
| 大文件存储 | 256MB 块 + 高 handler |
| 高并发读写 | 增加 transfer threads |
| 小文件多 | 合并 + 外部表 |
| 低延迟 | SSD + 少副本 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置文件。