在 Debian 上部署和运行的 Hadoop(HDFS / YARN / MapReduce)调优,通常可以从系统层、HDFS、YARN、MapReduce、JVM、网络与磁盘几个维度来做。下面给你一份实用向调优清单,适合生产/准生产环境。
Hadoop 对 fd 和线程数要求很高。
# /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 32768
* hard nproc 32768
重新登录或重启生效。
swap 会导致 JVM GC 停顿剧增。
swapoff -a
并注释 /etc/fstab 中的 swap 行。
# /etc/sysctl.conf
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 1
vm.overcommit_memory = 1
sysctl -p
defaults,noatime,nodiratime
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.block.size</name>
<value>134217728</value> <!-- 128MB -->
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>20</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>40</value>
</property>
hadoop-env.sh:
export HADOOP_NAMENODE_OPTS="-Xmx8g -Xms8g"
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>61440</value> <!-- 64G 机器示例 -->
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>61440</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
避免 OOM:
yarn.nodemanager.pmem-check-enabled=true
yarn.nodemanager.vmem-pmem-ratio=2.1
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>512</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1536m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3072m</value>
</property>
对 NameNode / ResourceManager:
-XX:+UseG1GC
-Xms8g -Xmx8g
对 Task:
-XX:+UseParallelGC
| 现象 | 可能原因 |
|---|---|
| NameNode 卡顿 | handler 数太小 |
| Container OOM | memory-mb 设置不合理 |
| 磁盘 IO 高 | 副本数 / 小文件过多 |
| 任务慢 | map/reduce 内存不足 |
| GC 长停顿 | 未使用 G1 |
hdfs dfs -count如果你愿意,可以告诉我:
我可以给你一份针对你集群的定制调优方案。