在 CentOS 上优化 HDFS(Hadoop Distributed File System),通常从 操作系统、Hadoop 参数、硬件、集群架构 几个层面入手。下面给你一套实战型优化清单,适用于生产环境。
HDFS 对延迟敏感,swap 会导致性能严重下降。
# 临时关闭
swapoff -a
# 永久关闭(注释 /etc/fstab 中的 swap 行)
建议:
vm.swappiness = 1
vim /etc/sysctl.conf
sysctl -p
mkfs.xfs /dev/sdb
挂载参数(推荐):
mount -o noatime,nodiratime /dev/sdb /data
/etc/fstab 示例:
/dev/sdb /data xfs noatime,nodiratime 0 0
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
vim /etc/sysctl.conf
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 8192
sysctl -p
适合大文件场景:
<property>
<name>dfs.blocksize</name>
<value>256m</value>
</property>
默认 128MB,大文件可 256MB / 512MB
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
生产环境一般 3,测试环境可 2 或 1
<property>
<name>dfs.namenode.handler.count</name>
<value>64</value>
</property>
建议:
<property>
<name>dfs.datanode.handler.count</name>
<value>32</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data1/dfs,/data2/dfs,/data3/dfs</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
export HADOOP_NAMENODE_OPTS="-Xms32g -Xmx32g -XX:+UseG1GC"
export HADOOP_DATANODE_OPTS="-Xms8g -Xmx8g -XX:+UseG1GC"
<property>
<name>dfs.client.write.packet.size</name>
<value>65536</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
需要:
hdfs dfsadmin -report
hdfs dfsadmin -report | grep -i under
| 场景 | 优化重点 |
|---|---|
| 小文件多 | HDFS Federation / HBase / Hive |
| 大文件读写 | 增大 block size |
| 高并发 | 增加 handler / transfer threads |
| 磁盘慢 | 多盘 + XFS + noatime |
| NameNode 卡 | 增加内存 + G1GC |
你可以直接告诉我:
“我的是 5 台 CentOS 7,每台 64G 内存,12 块盘”