温馨提示×

linux hadoop为何负载过高

小樊
40
2026-10-13 09:20:54
栏目: 智能运维

在 Linux 上运行 Hadoop 时,负载(load average)过高通常不是单一原因,而是 CPU、内存、磁盘 I/O、网络或 Hadoop 自身配置共同导致的。下面按常见原因 → 表现 → 排查方法来说明。


一、最常见原因分类

1️⃣ CPU 密集型任务过多

表现

  • top 中 CPU 使用率很高(user / system)
  • load average 持续 > CPU 核数

常见来源

  • MapReduce 任务过多
  • 数据倾斜(某些 task 极其重)
  • 压缩算法(如 gzip)占用 CPU
  • Hive / Spark on YARN 并发太高

排查

top
htop
mpstat -P ALL 1

YARN 页面查看:

http://resourcemanager:8088

2️⃣ 内存不足导致频繁 Swap

表现

  • load 高但 CPU 不高
  • 系统响应慢
  • free -h 看到 swap 被使用

原因

  • Hadoop / YARN 内存配置过大
  • 堆内存 + 系统缓存 + OS 占用 > 物理内存
  • JVM GC 频繁(Full GC)

排查

free -h
vmstat 1
cat /proc/meminfo
jstat -gc <pid>

典型问题

yarn.nodemanager.resource.memory-mb=64G
但机器只有 32G

3️⃣ 磁盘 I/O 瓶颈(非常常见)

表现

  • %wa(iowait)很高
  • load 高但 CPU 空闲
  • 磁盘灯常亮

原因

  • HDFS 写放大
  • 小文件过多
  • 副本数过高(dfs.replication=3)
  • 磁盘未做 RAID / 单盘

排查

iostat -x 1
iotop
df -h

优化

  • 合并小文件
  • 调整副本数
  • 使用多块磁盘(dfs.datanode.data.dir)

4️⃣ 网络 I/O 饱和

表现

  • 网络带宽打满
  • shuffle 阶段极慢
  • load 高但 CPU/IO 不高

原因

  • 大量 map 输出
  • 跨机架 / 跨机房
  • 副本复制

排查

iftop
sar -n DEV 1

5️⃣ Hadoop 配置不合理(重点)

常见错误配置:

YARN 资源分配过大

yarn.scheduler.maximum-allocation-mb 太大

Container 数量爆炸

yarn.nodemanager.resource.memory-mb / container 内存太小

HDFS 参数

dfs.blocksize 太小(如 64M → 大量 block)
dfs.replication 太高

6️⃣ 僵尸 / 异常进程

表现

  • load 高但看不到明显进程
  • D 状态进程多
ps -eo pid,stat,comm | grep D

二、快速定位思路(实战)

# 1. 看整体负载
uptime
top

# 2. 看是哪类资源
vmstat 1
iostat -x 1
mpstat -P ALL 1

# 3. 看 Hadoop
yarn top
yarn application -list

三、典型结论总结

Hadoop 负载高 ≠ CPU 高

  • 多半是 I/O 或 内存 + GC
  • 小文件、配置不合理是元凶
  • 单节点资源被 YARN 超额分配很常见

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

  • 是 NameNode / DataNode / NodeManager 哪类节点?
  • top / iostat 的输出
  • Hadoop 版本(2.x / 3.x)

我可以直接帮你定位具体配置问题。

0 踩