在 Linux + Hadoop 环境下,调优一般从 操作系统、JVM、HDFS、YARN、MapReduce/计算引擎、网络与硬件 几个层面入手。下面给你一个实战向的调优清单,适合生产环境参考。
Hadoop 会打开大量文件。
# 查看
ulimit -n
ulimit -u
# 修改 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
swap 会导致 GC 停顿和 IO 抖动。
sysctl vm.swappiness=1
# 永久
echo "vm.swappiness=1" >> /etc/sysctl.conf
推荐使用 ext4 / xfs
mount -o noatime,nodiratime /dev/sdb /data
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_tw_reuse=1
net.core.rmem_max=16777216
net.core.wmem_max=16777216
export HADOOP_NAMENODE_OPTS="
-Xms8g -Xmx8g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/hadoop/gc-nn.log
"
NameNode 内存一般:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value> <!-- 128M -->
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
dfs.datanode.data.dir<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>64000</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>16</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>32000</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
NodeManager内存 ≈ 物理内存 × 0.8
Container内存 ≤ NM内存
mapreduce.map.memory.mb=2048
mapreduce.reduce.memory.mb=4096
mapreduce.task.io.sort.mb=512
mapreduce.map.java.opts=-Xmx1600m
mapreduce.reduce.java.opts=-Xmx3200m
hive.merge.*coalesce / repartition# 集群状态
hdfs dfsadmin -report
yarn node -list
# GC 查看
jstat -gcutil <pid> 1000
# 磁盘 IO
iostat -x 1
# 网络
sar -n DEV 1
先定位瓶颈,再调优
如果你愿意,可以告诉我:
我可以给你一套 针对性调优参数模板。