温馨提示×

linux hadoop怎么调优

小樊
43
2026-09-01 14:44:59
栏目: 智能运维

Linux + Hadoop 环境下,调优一般从 操作系统、JVM、HDFS、YARN、MapReduce/计算引擎、网络与硬件 几个层面入手。下面给你一个实战向的调优清单,适合生产环境参考。


一、Linux 系统层调优(基础但非常关键)

1. 文件句柄 & 进程数

Hadoop 会打开大量文件。

# 查看
ulimit -n
ulimit -u

# 修改 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

2. 禁用 swap(非常重要)

swap 会导致 GC 停顿和 IO 抖动。

sysctl vm.swappiness=1
# 永久
echo "vm.swappiness=1" >> /etc/sysctl.conf

3. 文件系统 & 挂载参数

推荐使用 ext4 / xfs

mount -o noatime,nodiratime /dev/sdb /data

4. 网络参数调优

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

二、JVM 调优(NameNode / ResourceManager / DataNode)

通用建议

  • 使用 G1 GC(JDK8u20+)
  • 避免 Full GC

NameNode 示例

export HADOOP_NAMENODE_OPTS="
-Xms8g -Xmx8g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/hadoop/gc-nn.log
"

NameNode 内存一般:

  • 小型集群:4–8G
  • 大型集群:16–32G

三、HDFS 调优

1. hdfs-site.xml

<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>

2. DataNode 磁盘

  • 多块磁盘做 JBOD
  • 不要做 RAID5
  • 每个磁盘一个 dfs.datanode.data.dir

四、YARN 调优(最影响任务性能)

yarn-site.xml

<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 / Spark 调优

MapReduce

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

小文件问题(非常常见)

  • 使用 HAR / CombineFileInputFormat
  • Hive:开启 hive.merge.*
  • Spark: coalesce / repartition

六、网络 & 硬件建议

  • 万兆网卡(10GbE)
  • DataNode 磁盘:SATA ≥ 6 块
  • NameNode:SSD + ECC 内存
  • 避免 CPU 超线程过度使用

七、常用调优排查命令

# 集群状态
hdfs dfsadmin -report
yarn node -list

# GC 查看
jstat -gcutil <pid> 1000

# 磁盘 IO
iostat -x 1

# 网络
sar -n DEV 1

八、典型调优思路总结

先定位瓶颈,再调优

  1. CPU 满?→ 减 container / 调并行度
  2. 磁盘 IO 满?→ 多磁盘 / 少小文件
  3. 网络满?→ 压缩 / 本地化
  4. GC 长?→ G1 + 控制内存

如果你愿意,可以告诉我:

  • Hadoop 版本(2.x / 3.x)
  • 集群规模(几台、什么配置)
  • 主要跑 MR / Hive / Spark

我可以给你一套 针对性调优参数模板

0