在 CentOS 上优化 HDFS(Hadoop Distributed File System)性能,通常从操作系统层、HDFS 参数配置、硬件与网络、以及使用方式几个方面入手。下面系统地给你一份实战向的优化清单。
mkfs.xfs /dev/sdb
defaults,noatime,nodiratime,barrier=0
生产环境如担心数据安全,barrier 可保留
sysctl vm.swappiness=10
echo 'vm.swappiness=10' >> /etc/sysctl.conf
HDFS 会打开大量文件:
ulimit -n 65536
ulimit -u 65536
永久生效:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
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
sysctl -p
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
性能优先可降低为 2(牺牲容灾)
<property>
<name>dfs.namenode.handler.count</name>
<value>40</value>
</property>
<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>
</property>
yarn.nodemanager.resource.memory-mb
yarn.scheduler.maximum-allocation-mb
mapreduce.task.io.sort.mb
避免任务过多导致 HDFS 小文件风暴
dfs.datanode.data.dir
/usr/local/hadoop/data1,/usr/local/hadoop/data2
hdfs dfsadmin -reportiostat -x 1netstat -anp | grep 50010| 项目 | 优化前 | 优化后 |
|---|---|---|
| 写入吞吐 | 80MB/s | 300MB/s+ |
| NameNode GC | 频繁 | 稳定 |
| 小文件数 | 百万级 | 合并后降 10x |
你可以告诉我:
我可以直接给你一份可落地的配置文件示例。