目录
- 背景
- 第一部分 Yarn状态数据接口
- 第二部分 Java实现
- 第三部分 总结
- 参考文献及资料
背景
目前国内大部分企业级的大数据平台资源调度系统都是基于Yarn集群。生产环境上,各种大数据计算框架运行在Yarn上,就需要对Yarn平台的资源情况进行实时监控。虽然Yarn本身提供一个Web管理界面展示平台资源使用情况,但是这些运行状态数据需要实时获取和监控。随着智能化运维推进,需要对监控数据能实时分析、异常检测、自动故障处理。这些场景都需要能实时获取到Yarn平台的状态监控数据。
本文将详细介绍各种监控实现的方法,并重点介绍Java实现。
第一部分 Yarn状态数据接口
1.1 命令行方式
yarn
命令在{hadoop_home}/bin
路径下,对于部署hadoop
客户端的客户端需要加载命令环境变量。
- 参看任务信息
1 | 查看所有任务信息 |
这里参数appStates
的状态有:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
另外还可以指定计算框架的类型,例如:
1 | 参看所有MapReduce任务 |
- 参看指定任务状态信息
1 | yarn application -status application_1575989345612_32134 |
1.2 Restful Api
接口
ResourceManager
允许用户通过REST API
获取有关群集的信息:群集上的状态、群集上的指标、调度程序信息,另外还有群集中节点的信息以及集群上应用程序的运行信息。
- 查询整个集群指标
1 | GET http://http address:port/ws/v1/cluster/metrics |
- 查询集群调度器详情
1 | GET http://http address:port/ws/v1/cluster/scheduler |
- 监控任务
1 | curl http://http address:port/ws/v1/cluster/apps/state |
- 查看指定任务
1 | GET http://http address:port/ws/v1/cluster/apps/ |
- 查看指定任务的详细信息
1 | curl http://http address:port/proxy/ws/v2/mapreduce/info |
- 杀死任务
yarn application -kill application_id
1 | curl -v -X PUT -d '{"state": "KILLED"}' http://http address:port>/ws/v1/cluster/apps/ |
1.2 JMX Metrics
监控
首先需要开启jmx
,编辑{hadoop_home}/etc/hadoop/yarn-env.sh
配置文件,最后天下下面三行配置:
1 | YARN_OPTS="$YARN_OPTS -Dcom.sun.management.jmxremote.authenticate=false" |
其中8001
是服务监听端口。jmx
提供了Cluster、Queue、Jvm、FSQueue
等Metrics
信息。
1 | 获取YARN相关的jmx |
上面的方式会获取服务所有的信息(json
格式)。如果需要精准获得准确信息,org.apache.hadoop.jmx.JMXJsonServlet
类支持三个参数:callback
、qry
、get
。其中qry
用于过滤,下面的url
用于查询Yarn
上spark
用户在default
队列上任务信息。
1 | http://192.168.1.2:8088/jmx?qry=Hadoop:service=ResourceManager,name=QueueMetrics,q0=root,q1=default,user=spark |
更详细的信息参考官网:https://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/jmx/JMXJsonServlet.html
1.3 Python Api
接口
对于Python
有第三方包支持和yarn
进行交互,github
地址为:https://github.com/CODAIT/hadoop-yarn-api-python-client
案例代码:
1 | from yarn_api_client import ApplicationMaster, HistoryServer, NodeManager, ResourceManager |
对于Hadoop
安全集群,还需要部署认证包requests_kerberos
。具体可以参考说明文档:https://python-client-for-hadoop-yarn-api.readthedocs.io/en/latest/index.html
第二部分 Java实现
2.1 maven依赖
根据Hadoop
的版本添加下面的依赖包:
1 | <dependency> |
2.2 接口实现
我们将相关配置文件放在resources/conf
路径下面,涉及的文件有:
1 | 集群配置文件 |
下面是案例代码:
1 | package com.main.yarnmonitor; |
Yarn客户端YarnClient
中定义了方法getApplications
,获取到正在运行的任务清单,返回数据类型是:List<ApplicationReport>
,如下:
1 | List<ApplicationReport> applications = yarnClient.getApplications(EnumSet.of(YarnApplicationState.RUNNING)); |
对于数据类型ApplicationReport
具有方法getApplicationResourceUsageReport()
获得每个Yarn任务的ApplicationResourceUsageReport
(任务资源报告):
1 | ApplicationResourceUsageReport resourceReport = Application.getApplicationResourceUsageReport(); |
ApplicationResourceUsageReport
提供了获取各类资源的方法:
1 | Resource usedResources = resourceReport.getUsedResources(); |
第三部分 总结
Java的案例中我们使用了HashMap
(applicationInformation
)数据类型存储关注的任务信息,然后使用邮件接口发出。在实际使用中可以根据需要存储在elasticsearch
集群。
另外对于其他方法,作者没有实际使用,可能存在部分信息未涵盖,可以参考官网文档使用。
参考文献及资料
1、YARN Application Security
,链接:https://hadoop.apache.org/docs/r2.7.4/hadoop-yarn/hadoop-yarn-site/YarnApplicationSecurity.html
2、ApplicationResourceUsageReport
接口,链接:http://hadoop.apache.org/docs/r2.7.0/api/org/apache/hadoop/yarn/api/records/ApplicationResourceUsageReport.html
3、ResourceManager REST API’s
,链接:https://hadoop.apache.org/docs/r2.7.3/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html
4、基于Yarn API
的Spark程序监控,链接:https://yq.aliyun.com/articles/710902