温馨提示×

linux hadoop如何调优性能

小樊
48
2026-09-07 14:02:47
栏目: 智能运维

在 Linux 上运行 Hadoop(HDFS / YARN / MapReduce)时,性能调优通常涉及操作系统层、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 会导致 JVM GC 停顿严重。

swapoff -a
# 永久禁用:注释 /etc/fstab 中 swap 行

3. 磁盘 I/O 调度器

对 HDD 推荐 deadline,SSD 推荐 noop 或 none

echo deadline > /sys/block/sda/queue/scheduler

4. 文件系统与挂载参数

  • 使用 ext4 或 xfs
  • 挂载选项:
noatime,nodiratime

5. 网络参数

# 增大 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

二、HDFS 性能调优

1. 块大小(Block Size)

  • 大文件:256MB ~ 512MB
  • 小文件多:考虑 HAR / HBase / Ozone
<property>
  <name>dfs.blocksize</name>
  <value>268435456</value>
</property>

2. NameNode 内存

NameNode 元数据在内存中:

  • 每文件/块 ≈ 150–300 bytes
  • 1000 万文件 ≈ 3–5 GB
export HADOOP_NAMENODE_OPTS="-Xmx16g"

3. DataNode 并发与磁盘

dfs.datanode.handler.count=20
dfs.datanode.max.transfer.threads=8192

多磁盘:

  • 每个磁盘一个 dfs.datanode.data.dir
  • 不要放系统盘

三、YARN 资源调度调优

1. 合理设置 NodeManager 资源

yarn.nodemanager.resource.memory-mb=128000
yarn.nodemanager.resource.cpu-vcores=32

2. Container 最小/最大

yarn.scheduler.minimum-allocation-mb=1024
yarn.scheduler.maximum-allocation-mb=32768

3. 调度器选择

  • 默认:CapacityScheduler
  • 多租户:Capacity
  • 低延迟:Fair

四、MapReduce 调优(最常用)

1. Map 数量

由 split size 决定:

mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.maxsize

2. Reduce 数量

mapreduce.job.reduces=集群核数 * 0.95

3. JVM 重用(减少启动开销)

mapreduce.job.jvm.numtasks=-1

4. 内存设置(避免 OOM)

mapreduce.map.memory.mb=4096
mapreduce.reduce.memory.mb=8192
mapreduce.map.java.opts=-Xmx3072m
mapreduce.reduce.java.opts=-Xmx6144m

5. 压缩(强烈推荐)

mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec

五、常见性能瓶颈与排查

1. 磁盘 IO 瓶颈

iostat -x 1
  • %util 高 → 增加磁盘
  • DataNode 单盘写入慢

2. CPU 瓶颈

top / htop
  • Reduce 阶段 CPU 密集
  • 加 vcore

3. 网络瓶颈

iftop
  • Shuffle 阶段网络重
  • 增加带宽 / 减少数据倾斜

4. 数据倾斜

  • 自定义 Partitioner
  • 加盐(salt)处理热点 key

六、实战建议(优先级)

✅ 第一优先:

  • 关 swap
  • 调 ulimit
  • 合理内存 & vcore
  • 开启压缩

✅ 第二优先:

  • HDFS block size
  • Reduce 数量
  • JVM 重用

✅ 第三优先:

  • 网络 / 磁盘隔离
  • 监控(Ganglia / Prometheus)

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

  • Hadoop 版本(2.x / 3.x)
  • 集群规模(节点数 / 内存 / 磁盘)
  • 主要跑什么任务(ETL / ML / Spark)

我可以直接给你一套可复制的配置文件参数。

0 踩