1. 首页 > Hadoop教程 > 正文

大数据教程FG006-Hadoop配置文件核心参数调优实战

本文档风哥主要介绍Hadoop配置文件核心参数调优实战,包括Hadoop配置文件概述、Hadoop核心参数分类、Hadoop参数调优原则、core-site.xml核心配置、hdfs-site.xml核心配置、yarn-site.xml核心配置、内存参数调优、IO参数调优、网络参数调优、小规模集群配置案例、大规模集群配置案例、配置问题排查案例等内容,风哥教程参考Hadoop官方文档Configuration等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 Hadoop配置文件概述

Hadoop配置文件采用XML格式,主要包括core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml等核心配置文件。更多视频教程www.fgedu.net.cn

Hadoop核心配置文件:

  • core-site.xml:Hadoop核心配置,包括文件系统、临时目录等
  • hdfs-site.xml:HDFS配置,包括副本数、块大小、存储目录等
  • yarn-site.xml:YARN配置,包括资源管理、调度器等
  • mapred-site.xml:MapReduce配置,包括任务内存、任务数量等
  • hadoop-env.sh:环境变量配置,包括JVM参数、日志目录等

1.2 Hadoop核心参数分类

Hadoop核心参数分类:

参数类型 配置文件 主要参数
文件系统参数 core-site.xml fs.defaultFS、hadoop.tmp.dir
存储参数 hdfs-site.xml dfs.replication、dfs.blocksize
资源参数 yarn-site.xml yarn.nodemanager.resource.memory-mb
计算参数 mapred-site.xml mapreduce.map.memory.mb
JVM参数 hadoop-env.sh HADOOP_HEAPSIZE、HADOOP_NAMENODE_OPTS

1.3 Hadoop参数调优原则

Hadoop参数调优原则:

  • 根据业务场景调优:不同业务场景需要不同的参数配置
  • 根据硬件资源调优:根据CPU、内存、磁盘、网络资源调整参数
  • 根据数据量调优:根据数据量大小调整相关参数
  • 逐步调优:一次只调整一个参数,观察效果
  • 记录变更:记录每次参数变更和效果
风哥提示:Hadoop参数调优是一个持续的过程,需要根据实际业务场景和硬件资源进行合理配置。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 core-site.xml核心配置

core-site.xml核心配置参数:

# core-site.xml核心配置


fs.defaultFS
hdfs://mycluster
HDFS默认文件系统地址

hadoop.tmp.dir
/bigdata/tmp/hadoop
Hadoop临时目录

io.file.buffer.size
131072
SequenceFiles读写缓冲区大小

fs.trash.interval
1440
垃圾回收间隔(分钟)
fs.trash.checkpoint.interval
60
垃圾回收检查点间隔(分钟)

hadoop.proxyuser.hive.hosts
*
hadoop.proxyuser.hive.groups
*

io.compression.codecs
org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.Lz4Codec,org.apache.hadoop.io.compress.SnappyCodec

2.2 hdfs-site.xml核心配置

hdfs-site.xml核心配置参数:

# hdfs-site.xml核心配置


dfs.replication
3
数据块副本数

dfs.blocksize
134217728
数据块大小(128MB)

dfs.namenode.name.dir
file:///bigdata/fgdata/namenode
NameNode数据存储目录

dfs.datanode.data.dir
file:///bigdata/fgdata/datanode1,file:///bigdata/fgdata/datanode2,file:///bigdata/fgdata/datanode3
DataNode数据存储目录

dfs.namenode.handler.count
100
NameNode RPC处理线程数

dfs.datanode.handler.count
10
DataNode RPC处理线程数

dfs.heartbeat.interval
3
DataNode心跳间隔(秒)

dfs.permissions.enabled
true
是否启用权限检查

dfs.client.read.shortcircuit
true
启用短路读取
dfs.domain.socket.path
/var/lib/hadoop-hdfs/dn_socket
短路读取socket路径

2.3 yarn-site.xml核心配置

yarn-site.xml核心配置参数:

# yarn-site.xml核心配置


yarn.resourcemanager.hostname
rm1
ResourceManager主机名

yarn.nodemanager.aux-services
mapreduce_shuffle
NodeManager辅助服务

yarn.nodemanager.resource.memory-mb
49152
节点可用内存(MB)

yarn.nodemanager.resource.cpu-vcores
16
节点可用CPU核数

yarn.scheduler.minimum-allocation-mb
1024
容器最小内存(MB)

yarn.scheduler.maximum-allocation-mb
16384
容器最大内存(MB)

yarn.nodemanager.vmem-check-enabled
false
是否启用虚拟内存检查

yarn.nodemanager.pmem-check-enabled
false
是否启用物理内存检查

yarn.log-aggregation-enable
true
是否启用日志聚合

yarn.log-aggregation.retain-seconds
604800
日志保留时间(秒)

yarn.nodemanager.remote-app-log-dir
/yarn/logs
聚合日志目录

生产环境建议:Hadoop配置文件需要根据实际硬件资源和业务场景进行调整,建议先在测试环境验证后再应用到生产环境。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 内存参数调优

3.1.1 NameNode内存调优

# NameNode内存调优

## 内存计算公式
NameNode内存 = 文件数量 × 1KB + 目录数量 × 2KB + 预留内存

## 示例计算
文件数量:1亿
目录数量:100万
NameNode内存 = 1亿 × 1KB + 100万 × 2KB + 10GB = 100GB + 2GB + 10GB = 112GB

## 配置方法
# hadoop-env.sh
export HADOOP_NAMENODE_OPTS=”-Xmx112g -Xms112g -XX:+UseG1GC -XX:MaxGCPauseMillis=200″

## JVM参数优化
export HADOOP_NAMENODE_OPTS=”-Xmx112g -Xms112g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:InitiatingHeapOccupancyPercent=35 \
-XX:ParallelGCThreads=16 \
-XX:ConcGCThreads=4 \
-XX:+ExplicitGCInvokesConcurrent \
-Djava.net.preferIPv4Stack=true”

3.1.2 DataNode内存调优

# DataNode内存调优

## 内存配置建议
– 小规模集群:4GB-8GB
– 中规模集群:8GB-16GB
– 大规模集群:16GB-32GB

## 配置方法
# hadoop-env.sh
export HADOOP_DATANODE_OPTS=”-Xmx16g -Xms16g -XX:+UseG1GC”

## JVM参数优化
export HADOOP_DATANODE_OPTS=”-Xmx16g -Xms16g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:InitiatingHeapOccupancyPercent=45 \
-XX:ParallelGCThreads=8 \
-XX:ConcGCThreads=2″

3.1.3 ResourceManager内存调优

# ResourceManager内存调优

## 内存配置建议
– 小规模集群:4GB-8GB
– 中规模集群:8GB-16GB
– 大规模集群:16GB-32GB

## 配置方法
# yarn-env.sh
export YARN_RESOURCEMANAGER_HEAPSIZE=16384

## JVM参数优化
export YARN_RESOURCEMANAGER_OPTS=”-Xmx16g -Xms16g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:InitiatingHeapOccupancyPercent=45 \
-XX:ParallelGCThreads=8 \
-XX:ConcGCThreads=2″

3.2 IO参数调优

3.2.1 HDFS IO调优

# HDFS IO调优

## IO缓冲区配置 io.file.buffer.size
131072
IO缓冲区大小(128KB)

## DataNode传输线程数 dfs.datanode.max.transfer.threads
8192
DataNode最大传输线程数

## DataNode处理线程数 dfs.datanode.handler.count
10
DataNode RPC处理线程数

## 客户端缓存 dfs.client.read.shortcircuit
true
dfs.client.read.shortcircuit.streams.cache.size
256
dfs.client.read.shortcircuit.streams.cache.expiry.ms
300000

3.2.2 MapReduce IO调优

# MapReduce IO调优

## 排序缓冲区 mapreduce.task.io.sort.mb
256
排序缓冲区大小(MB)

## 排序因子 mapreduce.task.io.sort.factor
100
排序因子

## Shuffle并行度 mapreduce.reduce.shuffle.parallelcopies
50
Shuffle并行拷贝数

## 输出压缩 mapreduce.map.output.compress
true
mapreduce.map.output.compress.codec
org.apache.hadoop.io.compress.SnappyCodec

3.3 网络参数调优

3.3.1 操作系统网络参数调优

# 操作系统网络参数调优

# 增加TCP连接队列
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768

# 增加TCP最大连接数
net.ipv4.tcp_max_syn_backlog = 65536

# 启用TCP SYN cookies
net.ipv4.tcp_syncookies = 1

# 启用TCP连接复用
net.ipv4.tcp_tw_reuse = 1

# 禁用TCP连接回收
net.ipv4.tcp_tw_recycle = 0

# 减少TCP FIN超时时间
net.ipv4.tcp_fin_timeout = 30

# 增加TCP keepalive时间
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 30

# 增加TCP最大TIME_WAIT数量
net.ipv4.tcp_max_tw_buckets = 65535

# 增加本地端口范围
net.ipv4.ip_local_port_range = 1024 65535

3.3.2 Hadoop网络参数调优

# Hadoop网络参数调优

## RPC连接数 ipc.server.max.connections
8192
RPC服务器最大连接数

## RPC处理线程数 ipc.server.handler.count
100
RPC处理线程数

## RPC读线程数 ipc.server.read.threadpool.size
10
RPC读线程数

## 客户端连接数 ipc.client.connection.maxidletime
60000
客户端连接最大空闲时间(毫秒)
ipc.client.connect.max.retries
10
客户端连接最大重试次数

风哥提示:Hadoop参数调优需要综合考虑硬件资源、业务场景、数据量等因素,建议逐步调优并记录变更。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 小规模集群配置案例

4.1.1 集群规模:3节点

# 小规模集群配置案例

## 硬件配置
– CPU:16核
– 内存:64GB
– 磁盘:12块4TB
– 网络:千兆

## core-site.xml配置 fs.defaultFS
hdfs://nn1:9000
hadoop.tmp.dir
/bigdata/tmp/hadoop
io.file.buffer.size
65536

## hdfs-site.xml配置 dfs.replication
2
dfs.blocksize
134217728
dfs.namenode.handler.count
50

## yarn-site.xml配置 yarn.nodemanager.resource.memory-mb
49152
yarn.nodemanager.resource.cpu-vcores
12
yarn.scheduler.maximum-allocation-mb
16384

## hadoop-env.sh配置
export HADOOP_NAMENODE_OPTS=”-Xmx32g -Xms32g”
export HADOOP_DATANODE_OPTS=”-Xmx8g -Xms8g”
export YARN_RESOURCEMANAGER_HEAPSIZE=8192
export YARN_NODEMANAGER_HEAPSIZE=4096

4.2 大规模集群配置案例

4.2.1 集群规模:100节点

# 大规模集群配置案例

## 硬件配置
– CPU:24核
– 内存:128GB
– 磁盘:24块8TB
– 网络:万兆

## core-site.xml配置 fs.defaultFS
hdfs://mycluster
hadoop.tmp.dir
/bigdata/tmp/hadoop
io.file.buffer.size
131072

## hdfs-site.xml配置 dfs.replication
3
dfs.blocksize
268435456
dfs.namenode.handler.count
200

## yarn-site.xml配置 yarn.nodemanager.resource.memory-mb
98304
yarn.nodemanager.resource.cpu-vcores
20
yarn.scheduler.maximum-allocation-mb
32768

## hadoop-env.sh配置
export HADOOP_NAMENODE_OPTS=”-Xmx128g -Xms128g -XX:+UseG1GC”
export HADOOP_DATANODE_OPTS=”-Xmx16g -Xms16g -XX:+UseG1GC”
export YARN_RESOURCEMANAGER_HEAPSIZE=16384
export YARN_NODEMANAGER_HEAPSIZE=8192

4.3 配置问题排查案例

4.3.1 NameNode内存不足

# 问题现象:NameNode频繁Full GC
# 分析步骤:

# 1. 查看NameNode内存使用
jmap -heap

# 2. 查看GC日志
tail -f /bigdata/logs/hadoop/hadoop-hadoop-namenode-nn1.log | grep GC

# 3. 计算需要的内存
# 文件数量:2亿
# 目录数量:500万
# NameNode内存 = 2亿 × 1KB + 500万 × 2KB + 20GB = 200GB + 10GB + 20GB = 230GB

# 解决方案:
# 增加NameNode内存到256GB
export HADOOP_NAMENODE_OPTS=”-Xmx256g -Xms256g -XX:+UseG1GC”

4.3.2 YARN资源不足

# 问题现象:应用程序等待资源
# 分析步骤:

# 1. 查看YARN资源使用
yarn node -list -showDetails

# 2. 查看队列资源使用
yarn queue -status default

# 3. 查看应用程序资源需求
yarn application -status application_1234567890123_0001

# 解决方案:
# 增加节点资源或增加节点数量 yarn.nodemanager.resource.memory-mb
98304
yarn.nodemanager.resource.cpu-vcores
20

Part05-风哥经验总结与分享

5.1 Hadoop配置最佳实践

Hadoop配置最佳实践:

  • 统一配置管理:使用配置管理工具统一管理配置文件
  • 版本控制:使用Git等工具对配置文件进行版本控制
  • 配置备份:定期备份配置文件
  • 配置验证:修改配置后进行验证
  • 逐步调优:一次只调整一个参数

5.2 Hadoop配置管理脚本

Hadoop配置管理脚本:

# Hadoop配置管理脚本
#!/bin/bash
# hadoop_config_sync.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

# 配置文件目录
CONFIG_DIR=/bigdata/app/hadoop/etc/hadoop

# 节点列表
NODES=”nn1 nn2 dn1 dn2 dn3 dn4 dn5 dn6″

# 同步配置文件
sync_config() {
local node=$1
echo “同步配置到节点: $node”

# 同步配置文件
scp -r $CONFIG_DIR/* $node:$CONFIG_DIR/

echo “节点 $node 配置同步完成”
}

# 批量同步
for node in $NODES; do
sync_config $node
done

echo “所有节点配置同步完成”

5.3 Hadoop配置检查清单

Hadoop配置检查清单:

Hadoop配置检查清单:

  • □ 配置文件格式正确
  • □ 配置文件权限正确
  • □ 配置文件已同步到所有节点
  • □ 内存配置合理
  • □ IO配置合理
  • □ 网络配置合理
  • □ JVM参数配置正确
  • □ 配置已备份
风哥提示:Hadoop配置是集群性能的基础,合理的配置可以显著提升集群性能和稳定性。from bigdata视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息