在 Linux 上运行 Hadoop(HDFS / YARN / MapReduce)时,性能调优通常涉及操作系统层、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 会导致 JVM GC 停顿严重。
swapoff -a
# 永久禁用:注释 /etc/fstab 中 swap 行
对 HDD 推荐 deadline,SSD 推荐 noop 或 none
echo deadline > /sys/block/sda/queue/scheduler
ext4 或 xfsnoatime,nodiratime
# 增大 TCP 缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
256MB ~ 512MB<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
NameNode 元数据在内存中:
export HADOOP_NAMENODE_OPTS="-Xmx16g"
dfs.datanode.handler.count=20
dfs.datanode.max.transfer.threads=8192
多磁盘:
dfs.datanode.data.diryarn.nodemanager.resource.memory-mb=128000
yarn.nodemanager.resource.cpu-vcores=32
yarn.scheduler.minimum-allocation-mb=1024
yarn.scheduler.maximum-allocation-mb=32768
CapacityScheduler由 split size 决定:
mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.maxsize
mapreduce.job.reduces=集群核数 * 0.95
mapreduce.job.jvm.numtasks=-1
mapreduce.map.memory.mb=4096
mapreduce.reduce.memory.mb=8192
mapreduce.map.java.opts=-Xmx3072m
mapreduce.reduce.java.opts=-Xmx6144m
mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
iostat -x 1
%util 高 → 增加磁盘top / htop
iftop
✅ 第一优先:
✅ 第二优先:
✅ 第三优先:
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置文件参数。