温馨提示×

linux hadoop如何优化

小樊
48
2026-08-13 13:34:03
栏目: 智能运维

在 Linux 上优化 Hadoop,通常从 系统层、HDFS、YARN/MapReduce、硬件与架构 四个方面入手。下面给你一套实用、可落地的优化清单,适合生产环境。


一、Linux 系统层优化(非常关键)

1. 文件句柄与进程数

# 查看
ulimit -n
ulimit -u

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

2. 禁用 swap(强烈建议)

swapoff -a

永久禁用:

vi /etc/fstab
# 注释 swap 行

3. 文件系统与挂载参数

  • 推荐:ext4 / xfs
  • 挂载参数:
noatime,nodiratime

4. 内核参数优化

vi /etc/sysctl.conf
vm.swappiness = 0
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
sysctl -p

二、HDFS 优化

1. 块大小(Block Size)

  • 大文件:256MB / 512MB
<property>
  <name>dfs.blocksize</name>
  <value>268435456</value>
</property>

2. 副本数

  • 生产常用:3
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>

3. NameNode 内存

export HADOOP_NAMENODE_OPTS="-Xmx16g"

4. 心跳与副本检查

dfs.namenode.heartbeat.recheck-interval=300000

三、YARN & MapReduce 优化(重点)

1. 内存资源配置(最常见瓶颈)

yarn.nodemanager.resource.memory-mb=64GB
yarn.scheduler.maximum-allocation-mb=16GB
yarn.scheduler.minimum-allocation-mb=1GB

2. CPU 配置

yarn.nodemanager.resource.cpu-vcores=16

3. 容器内存与 JVM

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

4. Reduce 数量优化

mapreduce.job.reduces = (输入数据量 / 256MB)

四、MapReduce 执行优化

1. 小文件问题(非常重要)

✅ 使用:

  • HDFS Federation
  • HBase / Hive + ORC / Parquet
  • CombineFileInputFormat

2. 启用压缩

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

3. Speculative Execution(推测执行)

mapreduce.map.speculative=true
mapreduce.reduce.speculative=true

五、磁盘与硬件优化

1. 磁盘

  • 多个磁盘做 JBOD
  • 不要把 DataNode 放在系统盘

2. 网络

  • 千兆起步,推荐万兆
  • 避免跨机房调度

六、JVM 优化

export HADOOP_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200"

七、监控与调优工具

  • 监控
    • Ambari / Cloudera Manager
    • Prometheus + Grafana
  • 分析
    • YARN Web UI
    • Hadoop logs
  • 压测
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar TestDFSIO

八、常见性能问题速查

问题 原因 解决
任务慢 小文件多 合并小文件
OOM 内存不足 增大 container 内存
CPU 空转 reduce 数太少 增加 reduce
磁盘 IO 高 副本多 调副本数
卡在 0% 资源不足 检查 YARN

九、典型生产配置示例(单节点 64G)

yarn.nodemanager.resource.memory-mb=56GB
yarn.scheduler.maximum-allocation-mb=12GB
mapreduce.map.memory.mb=4096
mapreduce.reduce.memory.mb=8192
dfs.blocksize=256MB

如果你愿意,我可以:

  • ✅ 根据你的 集群规模(几台机器)
  • 业务类型(离线 / 实时 / Hive / Spark)
  • 硬件配置

给你一份 定制 Hadoop 优化方案

0