1. 首页 > Hadoop教程 > 正文

大数据教程FG158-Hadoop大数据资源管理优化实战

本文详细介绍Hadoop YARN资源管理优化实战,包括YARN架构、调度器配置、队列管理、资源监控、性能调优等内容,风哥教程参考Hadoop官方文档YARN部分,适合大数据运维工程师使用。学习交流加群风哥QQ113257174

Part01-基础概念与理论知识

1.1 YARN资源管理概述

YARN(Yet Another Resource Negotiator)是Hadoop的资源管理器,负责集群资源的管理和调度。更多视频教程www.fgedu.net.cn

YARN核心功能:

  • 资源管理:管理集群的CPU和内存资源
  • 任务调度:调度应用程序运行
  • 多租户:支持多个用户共享集群
  • 资源隔离:保证应用间资源隔离
  • 高可用:支持ResourceManager高可用
  • 可扩展:支持数千节点的大规模集群

1.2 YARN架构与核心组件

YARN核心组件:

# YARN核心组件
ResourceManager(RM):
– 全局资源管理器
– 接收应用提交
– 分配资源
– 调度应用
– 可配置高可用

NodeManager(NM):
– 每个节点的资源管理器
– 管理Container
– 监控节点资源
– 向RM汇报状态

ApplicationMaster(AM):
– 每个应用的管理者
– 申请资源
– 管理任务
– 监控任务执行

Container:
– 资源分配单位
– 包含CPU和内存
– 运行具体任务

1.3 YARN调度器介绍

YARN调度器对比:

  • FIFO Scheduler:先进先出,简单但不适合多租户
  • Capacity Scheduler:容量调度器,按队列分配容量,适合生产环境
  • Fair Scheduler:公平调度器,公平分配资源,适合多用户环境
风哥提示:Capacity Scheduler是生产环境最常用的调度器,支持队列分层、资源隔离、用户权限管理等功能。Fair Scheduler适合需要公平性的多用户环境。更多学习教程公众号风哥教程itpux_com

Part02-生产环境规划与建议

2.1 YARN资源规划

YARN资源规划要点:

# 节点资源规划
CPU配置:
– 每个Container vcore数量:1-8
– 预留系统CPU:1-2核
– vcore总数 ≈ 物理核数 * 2

内存配置:
– 每个Container内存:1GB-8GB
– 预留系统内存:8GB-16GB
– 容器内存总和 <= 节点总内存 – 系统内存

# 示例配置(32核128GB节点)
yarn.nodemanager.resource.memory-mb=102400
yarn.nodemanager.resource.cpu-vcores=24
yarn.scheduler.minimum-allocation-mb=1024
yarn.scheduler.maximum-allocation-mb=16384
yarn.scheduler.minimum-allocation-vcores=1
yarn.scheduler.maximum-allocation-vcores=8

# 系统预留
系统内存:24GB
系统CPU:8核

2.2 YARN核心配置

YARN核心配置:

# yarn-site.xml核心配置
<property>
<name>yarn.resourcemanager.hostname</name>
<value>fgedu-rm</value>
</property>

<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>102400</value>
</property>

<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>24</value>
</property>

<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>

<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
</property>

<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>

<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>8</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>

2.3 队列资源规划

队列资源规划示例:

队列规划示例:

  • root(根队列)
    • production(生产队列,60%容量)
      • etl(ETL队列,30%)
      • report(报表队列,20%)
      • ml(机器学习队列,10%)
    • development(开发队列,30%容量)
    • test(测试队列,10%容量)

from bigdata视频:www.itpux.com

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

3.1 YARN Capacity调度器配置

3.1.1 配置Capacity调度器

# 1. 配置yarn-site.xml
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

# 2. 配置capacity-scheduler.xml
cat > /bigdata/app/hadoop/etc/hadoop/capacity-scheduler.xml << ‘EOF’
<?xml version=”1.0″?>
<configuration>

<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>production,development,test</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.capacity</name>
<value>60</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.maximum-capacity</name>
<value>80</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.queues</name>
<value>etl,report,ml</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.etl.capacity</name>
<value>50</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.report.capacity</name>
<value>30</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.ml.capacity</name>
<value>20</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.development.capacity</name>
<value>30</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.development.maximum-capacity</name>
<value>50</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.test.capacity</name>
<value>10</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.test.maximum-capacity</name>
<value>20</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.user-limit-factor</name>
<value>2</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.state</name>
<value>RUNNING</value>
</property>

</configuration>
EOF

# 3. 刷新队列配置
yarn rmadmin -refreshQueues

# 4. 验证队列配置
yarn queue -status root.production

3.2 YARN Fair调度器配置

3.2.1 配置Fair调度器

# 1. 配置yarn-site.xml
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>

<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/bigdata/app/hadoop/etc/hadoop/fair-scheduler.xml</value>
</property>

# 2. 配置fair-scheduler.xml
cat > /bigdata/app/hadoop/etc/hadoop/fair-scheduler.xml << ‘EOF’
<?xml version=”1.0″?>
<allocations>

<queue name=”root”>
<queue name=”production”>
<weight>6.0</weight>
<queue name=”etl”>
<weight>3.0</weight>
</queue>
<queue name=”report”>
<weight>2.0</weight>
</queue>
<queue name=”ml”>
<weight>1.0</weight>
</queue>
</queue>

<queue name=”development”>
<weight>3.0</weight>
</queue>

<queue name=”test”>
<weight>1.0</weight>
</queue>
</queue>

<user name=”fgedu”>
<maxRunningApps>100</maxRunningApps>
</user>

<userMaxAppsDefault>20</userMaxAppsDefault>

<queuePlacementPolicy>
<rule name=”specified” create=”false”/>
<rule name=”primaryGroup” create=”false”/>
<rule name=”default” queue=”development”/>
</queuePlacementPolicy>

</allocations>
EOF

# 3. 重启ResourceManager
yarn –daemon stop resourcemanager
yarn –daemon start resourcemanager

3.3 节点标签配置

3.3.1 配置节点标签

# 1. 启用节点标签
<property>
<name>yarn.node-labels.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.node-labels.fs-store.root-dir</name>
<value>hdfs://fgedu-nn:8020/bigdata/fgdata/yarn/node-labels</value>
</property>

# 2. 添加节点标签
yarn rmadmin -addToClusterNodeLabels “GPU,GPU_MEM,SSD,HDD”

# 3. 查看节点标签
yarn cluster –list-node-labels

# 4. 为节点添加标签
yarn rmadmin -replaceLabelsOnNode “fgedu-node01=GPU,GPU_MEM fgedu-node02=SSD fgedu-node03=HDD”

# 5. 查看节点标签
yarn node -list -all

# 6. 配置队列使用节点标签
<property>
<name>yarn.scheduler.capacity.root.production.ml.accessible-node-labels</name>
<value>GPU,GPU_MEM</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.production.ml.accessible-node-labels.GPU.capacity</name>
<value>100</value>
</property>

# 7. 提交应用时指定节点标签
spark-submit –conf spark.yarn.node.label=GPU –class …

风哥提示:节点标签是YARN的强大功能,可以将不同类型的节点分配给不同的队列或应用。例如GPU节点给ML队列,SSD节点给ETL队列。学习交流加群风哥微信: itpux-com

Part04-生产案例与实战讲解

4.1 队列管理实战

4.1.1 队列操作

# 查看队列状态
yarn queue -status root.production
yarn queue -status root.production.etl

# 查看所有队列
yarn queue -list

# 提交应用到指定队列
# MapReduce
hadoop jar /bigdata/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi \
-Dmapreduce.job.queuename=root.production.etl 10 100

# Spark
spark-submit –master yarn –queue root.production.report –class …

# Flink
flink run -m yarn-cluster -yqu root.production.etl …

# 查看队列应用
yarn application -list -appStates ALL -queue root.production.etl

# Kill队列中的应用
yarn application -kill application_1234567890_0001

# 动态调整队列容量(需要配置)
# 修改capacity-scheduler.xml
yarn rmadmin -refreshQueues

# 验证队列配置
curl http://fgedu-rm:8088/ws/v1/cluster/scheduler

4.2 资源监控实战

4.2.1 Web UI监控

# 访问YARN Web UI
http://fgedu-rm:8088

# 主要页面
– 概览:集群资源、应用统计
– 调度器:队列资源、应用状态
– 节点:节点列表、资源使用
– 应用:运行、完成、失败的应用
– 工具:日志查看、配置查看

# 使用命令行监控
# 查看集群信息
yarn cluster

# 查看节点信息
yarn node -list -all
yarn node -status fgedu-node01:8041

# 查看应用信息
yarn application -list
yarn application -list -appStates RUNNING
yarn application -status application_1234567890_0001

# 查看Container日志
yarn logs -applicationId application_1234567890_0001
yarn logs -applicationId application_1234567890_0001 -containerId container_1234567890_0001_01_000001

# Prometheus监控
# 配置YARN JMX Exporter
-javaagent:/bigdata/app/jmx_prometheus_javaagent-0.19.0.jar=9405:/bigdata/app/hadoop/etc/hadoop/jmx_exporter.yaml

# Prometheus配置
scrape_configs:
– job_name: ‘yarn_rm’
static_configs:
– targets: [‘fgedu-rm:9405’]

– job_name: ‘yarn_nm’
static_configs:
– targets: [‘fgedu-node01:9405’, ‘fgedu-node02:9405’]

# Grafana Dashboard
# 关键指标:
– 集群总资源
– 集群已用资源
– 队列资源使用
– 应用数量
– 容器数量
– NodeManager状态

4.3 性能调优实战

4.3.1 性能调优技巧

# 优化1:合理配置容器大小
# 根据应用需求配置合理的容器大小
# 过小:容器数量多,调度开销大
# 过大:资源浪费,并发度低

# 优化2:调整调度器参数
# Capacity Scheduler
<property>
<name>yarn.scheduler.capacity.node-locality-delay</name>
<value>40</value>
</property>

<property>
<name>yarn.scheduler.capacity.rack-locality-additional-delay</name>
<value>100</value>
</property>

# 优化3:调整Container分配
# 小应用使用小容器
# 大应用使用大容器

# 优化4:启用资源抢占
<property>
<name>yarn.scheduler.capacity.root.production.preemption-disabled</name>
<value>false</value>
</property>

# 优化5:调整NM心跳间隔
<property>
<name>yarn.nodemanager.heartbeat-interval-ms</name>
<value>1000</value>
</property>

# 优化6:调整AM重试
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>2</value>
</property>

<property>
<name>yarn.app.mapreduce.am.max-attempts</name>
<value>2</value>
</property>

# 优化7:日志聚合优化
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>

生产环境建议:YARN性能调优是一个持续的过程。需要根据实际应用情况不断调整参数,监控资源使用,及时发现和解决问题。更多视频教程www.fgedu.net.cn

Part05-风哥经验总结与分享

5.1 YARN生产最佳实践

YARN生产最佳实践:

  • 队列规划:根据业务需求规划队列,合理分配容量
  • 资源预留:为系统预留足够的CPU和内存
  • 容器大小:根据应用需求配置合理的容器大小
  • 高可用:配置ResourceManager高可用
  • 监控告警:详细监控资源使用和应用状态
  • 日志聚合:启用日志聚合,方便问题排查

5.2 常见问题处理

# 常见问题1:应用卡住
– 检查资源是否足够
– 检查队列容量
– 检查是否有Deadlock
– 查看应用日志

# 常见问题2:NodeManager掉线
– 检查NM日志
– 检查网络连接
– 检查磁盘空间
– 检查内存使用
– 重启NM

# 常见问题3:资源不足
– 检查队列配置
– 增加集群节点
– 调整队列容量
– Kill非关键应用
– 优化应用资源使用

# 常见问题4:调度慢
– 调整调度器参数
– 减少应用数量
– 优化队列配置
– 检查RM性能

# 常见问题5:OOM问题
– 增加容器内存
– 优化应用内存使用
– 调整JVM参数
– 减少并发任务数

5.3 运维检查清单

# YARN运维检查清单
– [ ] ResourceManager状态
– [ ] NodeManager状态
– [ ] 集群资源使用
– [ ] 队列资源使用
– [ ] 应用状态
– [ ] 容器状态
– [ ] 磁盘空间
– [ ] 内存使用
– [ ] CPU使用
– [ ] 网络状态
– [ ] 告警规则检查
– [ ] 日志检查

# 日常巡检内容
1. 检查RM状态和HA状态
2. 检查NM状态
3. 检查集群资源使用
4. 检查队列资源使用
5. 查看失败应用
6. 检查资源告警
7. 查看RM/NM日志
8. 检查磁盘空间

风哥提示:YARN是Hadoop集群的核心组件,资源管理是否合理直接影响集群性能和用户体验。建议定期回顾队列配置,根据业务变化调整资源分配。学习交流加群风哥QQ113257174

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

联系我们

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

微信号:itpux-com

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