在 CentOS 上调优 HDFS 参数,通常是从 操作系统层(CentOS) 和 Hadoop/HDFS 配置层 两方面来做。下面按“先看系统,再看 HDFS”的顺序说明。
HDFS(尤其是 NameNode、DataNode)会打开大量文件。
# 查看
ulimit -n
# 修改(推荐 65536 或更高)
vim /etc/security/limits.conf
添加:
* soft nofile 65536
* hard nofile 65536
getenforce
vim /etc/selinux/config
SELINUX=disabled
然后重启或临时关闭:
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
或放行 HDFS 端口(如 8020、50010、50070 等)
HDD 推荐 deadline,SSD 推荐 noop
cat /sys/block/sd*/queue/scheduler
临时:
echo deadline > /sys/block/sda/queue/scheduler
永久(CentOS 7):
vim /etc/default/grub
# 添加 elevator=deadline
grub2-mkconfig -o /boot/grub2/grub.cfg
swapoff -a
vim /etc/fstab # 注释 swap 行
vim /etc/sysctl.conf
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
sysctl -p
配置文件位置(示例):
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
$HADOOP_HOME/etc/hadoop/core-site.xml
<property>
<name>dfs.namenode.handler.count</name>
<value>40</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>268435456</value> <!-- 256MB -->
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
hadoop-env.sh
export HADOOP_NAMENODE_OPTS="-Xmx8g -Xms8g"
export HADOOP_DATANODE_OPTS="-Xmx4g -Xms4g"
# 分发配置
scp hdfs-site.xml core-site.xml hadoop-env.sh slave1:/path
# 重启
stop-dfs.sh
start-dfs.sh
hdfs dfsadmin -report
hdfs dfs -df -h
jps
iostat -x 1
如果你愿意,可以告诉我:
我可以给你一套针对性 HDFS 调优参数模板。