在 Debian 上部署 Hadoop 时,调优通常分为 操作系统层面、Hadoop 配置层面、JVM 层面和应用层。下面给出一个实用、可落地的调优思路,适用于 Hadoop 2.x / 3.x(HDFS + YARN)。
mount -o noatime,nodiratime,data=writeback /dev/sdX /data
示例 /etc/fstab:
/dev/sdb1 /data ext4 noatime,nodiratime,data=writeback 0 0
Hadoop 会打开大量文件。
ulimit -n
ulimit -u
编辑 /etc/security/limits.conf:
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 65536
确保 PAM 启用:
/etc/pam.d/common-session
session required pam_limits.so
Swap 会严重拖慢 Hadoop。
swapoff -a
永久关闭:
vim /etc/fstab # 注释 swap 行
编辑 /etc/sysctl.conf:
vm.swappiness = 1
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
fs.file-max = 2097152
生效:
sysctl -p
<property>
<name>dfs.blocksize</name>
<value>268435456</value> <!-- 256MB -->
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>64</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>65536</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>32768</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
hadoop-env.sh:
export HADOOP_NAMENODE_OPTS="-Xms8g -Xmx8g -XX:+UseG1GC"
export HADOOP_DATANODE_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC"
export YARN_RESOURCEMANAGER_HEAPSIZE=4096
export YARN_NODEMANAGER_HEAPSIZE=4096
推荐 G1GC(尤其是大内存):
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>8192</value>
</property>
dfs.datanode.data.dir 使用多个目录:<property>
<name>dfs.datanode.data.dir</name>
<value>/data1/dfs,/data2/dfs,/data3/dfs</value>
</property>
| 现象 | 可能原因 |
|---|---|
| HDFS 写入慢 | swap 开启 / 磁盘少 |
| NameNode 卡 | 内存不足 / handler 小 |
| YARN 任务排队 | 资源未正确配置 |
| CPU 高但任务慢 | GC 问题 |
HDFS block size: 256MB
Replication: 3
NodeManager memory: 56GB
Map memory: 4GB
Reduce memory: 8GB
JVM: G1GC
如果你愿意,可以告诉我:
我可以给你 针对你环境的精确调优参数。