在 Linux 上运行 Hadoop(通常是 Hadoop 集群,包括 HDFS + YARN/MapReduce)时,“调优”一般从 操作系统层、HDFS 层、YARN/MapReduce 层、JVM 层、网络与磁盘 I/O 几个维度来做。下面按实战角度给你一个较系统的调优清单。
Hadoop 会打开大量文件(尤其 NameNode、DataNode)。
# 查看
ulimit -n
ulimit -u
# 修改 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
swap 会导致 JVM GC 停顿严重。
# 临时
swapoff -a
# 永久:注释 /etc/fstab 中 swap 行
mount -o noatime,nodiratime,data=writeback /
noatime 能明显减少磁盘访问。
对 HDD:
echo deadline > /sys/block/sda/queue/scheduler
对 SSD:
echo noop > /sys/block/sda/queue/scheduler
# /etc/sysctl.conf
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 300
sysctl -p
hdfs-site.xml:
<property>
<name>dfs.namenode.handler.count</name>
<value>40</value>
</property>
NameNode 堆内存(在 hadoop-env.sh):
export HADOOP_NAMENODE_OPTS="-Xmx8g"
经验:
<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.blocksize</name>
<value>256m</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
yarn-site.xml:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>61440</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
</property>
<property>
<name>mapreduce.job.maps</name>
<value>auto</value>
</property>
<property>
<name>mapreduce.job.reduces</name>
<value>自动 ≈ 0.95 * reduce slot</value>
</property>
经验:
<property>
<name>mapreduce.job.jvm.numtasks</name>
<value>10</value>
</property>
mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
mapred-env.sh / yarn-env.sh:
-export HADOOP_HEAPSIZE=4096
常见 JVM 参数:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
<property>
<name>mapreduce.map.speculative</name>
<value>true</value>
</property>
hdfs balancer
如果你愿意,可以告诉我:
我可以直接给你一套 可复制的配置文件参数。