YARN(Yet Another Resource Negotiator)作为 Hadoop 生态系统的核心资源管理器,负责集群资源的分配与调度。通过 YARN Shell,用户可以方便地管理集群、监控应用和配置资源。本文将深入解析 YARN Shell 的常用命令,帮助你高效管理 Hadoop 集群。
一、YARN Shell 基础
1. 命令结构
YARN 命令的基本语法为:
yarn [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
或直接调用类:
yarn [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
2. 获取帮助信息
所有命令均可通过 -help
参数查看详细用法:
# 查看全局帮助
yarn -help
# 查看特定子命令帮助
yarn application -help
二、核心命令分类解析
1. 应用程序管理(application)
# 列出所有应用程序(支持多种过滤条件)
yarn application -list \
-appTypes "SPARK,MR" \
-queue "default" \
-state RUNNING \
-user hadoop
# 查看应用详情
yarn application -status application_1620000000000_0001
# 终止应用程序
yarn application -kill application_1620000000000_0001
2. 队列管理(queue)
# 列出所有队列(显示作业详情)
yarn queue -list -showJobs
# 查看队列状态
yarn queue -status root.default
3. 节点管理(node)
# 列出所有节点(默认只显示活跃节点)
yarn node -list
# 列出所有节点(包括非活跃节点)
yarn node -list -all
# 查看特定节点详情
yarn node -status node1.example.com:8042
4. 日志管理(logs)
# 获取应用所有容器日志
yarn logs -applicationId application_1620000000000_0001
# 获取特定容器日志
yarn logs -applicationId application_1620000000000_0001 \
-containerId container_1620000000000_0001_01_000002
5. 资源监控(top)
# 实时监控集群资源使用(每5秒刷新)
yarn top -interval 5
三、高级命令与技巧
1. 动态调整日志级别
# 获取NodeManager日志级别
yarn daemonlog -getlevel node1.example.com:8042 root
# 设置ResourceManager日志级别为DEBUG
yarn daemonlog -setlevel rm1.example.com:8088 DEBUG
2. 应用尝试与容器管理
# 列出应用的所有尝试
yarn applicationattempt -list application_1620000000000_0001
# 列出应用尝试的所有容器
yarn container -list appattempt_1620000000000_0001_000001
3. 调度器配置更新
# 动态加载调度器配置(无需重启RM)
yarn schedulerconf -reload
4. 集群概览
# 查看集群资源使用情况
yarn cluster -info
# 查看集群节点报告
yarn node -list -all
四、命令对比与最佳实践
1. 常用命令速查表
功能 | YARN 命令 | 等效 Linux 命令 |
---|---|---|
列出应用 | yarn application -list |
ps -ef |
终止应用 | yarn application -kill |
kill -9 |
查看日志 | yarn logs |
tail -f |
查看节点状态 | yarn node -status |
ssh + top |
资源监控 | yarn top |
top |
2. 性能优化建议
- 批量操作:使用
-appTypes
和-states
参数过滤应用列表 - 实时监控:结合
yarn top
和watch
命令实现自动刷新watch -n 5 'yarn top -interval 1'
- 日志聚合:配置
yarn.log-aggregation-enable=true
集中管理日志
五、常见问题与解决方案
1. 应用无法正常终止
# 尝试强制终止
yarn application -kill -force application_1620000000000_0001
# 检查AM是否响应
yarn application -status application_1620000000000_0001
2. 日志无法获取
# 检查日志聚合配置
grep log-aggregation-enable $HADOOP_CONF_DIR/yarn-site.xml
# 手动从节点获取日志
ssh node1.example.com "cat /var/log/hadoop-yarn/containers/*"
3. 队列资源不足
# 查看队列配置
yarn queue -status root
# 动态调整队列容量
yarn rmadmin -refreshQueues
六、实战案例
1. 查找占用资源最多的应用
yarn top -maxTasks 5 | grep APPLICATION
2. 统计各用户运行的应用数量
yarn application -list | awk '{print $2}' | sort | uniq -c
3. 监控特定用户的应用
yarn application -list -user alice -states RUNNING
七、总结
YARN Shell 提供了全面的集群管理能力,通过本文介绍的命令,你可以:
- 监控集群资源使用情况
- 管理和调度应用程序
- 诊断和解决常见问题
- 动态调整集群配置
建议结合 YARN Web UI(默认地址:http://rm-host:8088)使用,以获得更直观的集群视图。在生产环境中,可将常用命令封装为脚本,提高操作效率。