开发者社区> 北斗云> 正文

基于Yarn API的Spark程序监控

简介: 一.简述 通过对Yarn ResourceManager中运行程序的状态(RUNNING、KILLED、FAILED、FINISHED)以及ApplicationMaster中Application的Job执行时长超过批次时间的监控,来达到对Spark on Yarn程序的失败重启、超时重启等功能 二.
+关注继续查看

一.简述

基于对Yarn ResourceManager中运行程序的状态(RUNNING、KILLED、FAILED、FINISHED)以及ApplicationMaster中Application的Job执行时长超过批次时间的监控,来达到对Spark on Yarn程序的失败重启、超时重启等功能

二.Yarn主要的几类API

1.查询整个集群指标

GET http:// http address:port>/ws/v1/cluster/metrics

2.查询集群调度器详情

GET http:// http address:port>/ws/v1/cluster/scheduler

3.监控任务

curl 'http:// http address:port>/ws/v1/cluster/apps//state'
GET http:// http address:port>/ws/v1/cluster/apps//state

4.查看指定任务

GET http:// http address:port>/ws/v1/cluster/apps/

5.查看指定任务的详细信息

curl http:// http address:port>/proxy//ws/v2/mapreduce/info"

6.杀死任务

yarn application -kill application_id
curl -v -X PUT -d '{"state": "KILLED"}''http:// http address:port>/ws/v1/cluster/apps/'
PUT http:// http address:port>/ws/v1/cluster/apps//state

三.YarnMonitor

Ⅰ. Setup

1. install yarn-api-client

you mast install yarn-api-client when you use this yarn monitor

  • python setup.py build
  • python setup.py install

2. uninstall yarn-api-client

when you need uninstall this yarn-api-client model,use this

  • pip list
  • pip uninstall yarn-api-client

3. upate yarn-api-client

when you need update python model,you need unintall and update

  • update yarn-api-client
  • cp yarn-api-client/base.py base.py.bak

4. offline intall python model

when you need intall other python model,you can do this

  • pip freeze > yarn.txt
  • mkdir yarnpackage
  • pip install --no-index --find-links=yarnpackage/ -r yarn.txt

Ⅱ. Command

you should modify the script permissions

  • chmod 774 start_prmsbd.sh

Ⅲ. Crontab

configure crontab task

  • crontab -l
  • crontab -e

1.start yarn monitor

*/1 * * * * ../yarnmonitor/yarn-monitor/command/start_yarn_monitor.sh >> ../yarnmonitor/yarn-monitor/logs/yarn-corntab.log 2>&1 
* * * * * sleep 60; ../yarnmonitor/yarn-monitor/command/start_yarn_monitor.sh

2.clear yarn monitor log

0 4 * * * ../yarn-monitor/command/clear_log_opm.sh >> ../yarn-monitor/logs/yarn-corntab.log 2>&1

0 4 * * * ../yarnmonitor/yarn-monitor/command/clear_log_opm.sh >> ../yarnmonitor/yarn-monitor/logs/yarn-corntab.log 2>&1

Ⅳ. Just for test

1. start yarn command

../python ./yarn-monitor/YarnMonitor.py

2. Application_Master API

curl --compressed -H "Accept: application/json" -X GET "http://***:8088/ws/v1/cluster/apps"
curl --compressed -H "Accept: application/json" -X GET "http://***:8088/ws/v1/cluster/apps"
curl --compressed -H "Accept: application/json" -X GET "http://***:8088/proxy/application_1549963435527_0001/ws/v1/mapreduce/info"

curl --compressed -H "Accept: application/json" -X GET "http://***:8088/proxy/application_1535085750394_0017/ws/v1/mapreduce/info"
curl --compressed -H "Accept: application/json" -X GET "http://***:8088/proxy/application_1535085750394_0017/ws/v2/mapreduce/info"

curl --compressed -H "Accept: application/json" -X GET "http://***:8088/proxy/application_1535085750394_0017/ws/v1/mapreduce/jobs/4536"

curl --compressed -H "Accept: application/json" -X GET "http://***:8088/proxy/application_1548125170651_0090/api/v1/applications"

四.问题

其中,在ApplicationMaster中查询Job的返回数据无法转json的异常时,需修改yarn-api-client中修改对应API返回数据,可参考:

if 'ws/v1/mapreduce/info' in path:
            if response.status == OK:
                html_content = response.read()
                element_html = etree.HTML(html_content)
                tr_list = element_html.xpath('//tbody/tr')
                content_list = []
                for tr in tr_list:
                    item = {}
                    item['id'] = tr.xpath('./td[1]/text()')[0].replace('\n', '').strip()
                    item['duration'] = tr.xpath('./td[4]/text()')[0]
                    # 打印每条信息
                    # logging.info(item)
                    content_list.append(item)
                    # print content_list
                    return content_list
                response.close()
                return self.response_class(content_list)
            else:
                msg = 'Response finished with status: %s' % response.status
                raise APIError(msg)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
easyswoole快速实现一个网站的api接口程序
easyswoole快速实现一个网站的api接口程序
17 0
WebAPI学习(一)——创建Web API程序
WebAPI学习(一)——创建Web API程序
111 0
【编译原理+句柄+入栈顺序从右至左+系统调用+win api+程序安排+acm ieee usenix信息】答疑
【编译原理+句柄+入栈顺序从右至左+系统调用+win api+程序安排+acm ieee usenix信息】答疑
35 0
程序如何进行-身份证实名认证接口核验【阿里云api服务】
如今随着互联网产业的多元化发展,尤其是互联网金融,O2O,共享经济等新兴商业形式的兴起,企业对实名认证业务的数据形式和数据质量有了更高的需求。如今也衍生出身份证实名认证业务,通过接口将身份证号码、姓名上传至阿里云,再与全国公民身份信息系统进行匹配,判断信息的一致性。
295 0
pyqt5 + 百度api 打造一个图像人脸识别、分割的程序
前序 这篇文章主要介绍利用 pyqt5 和 百度人脸识别 api 搭建一个具有人脸识别、头像裁剪等多个功能集一体的小工具,我们先看一下程序的最终效果
247 0
通过程序来介绍Node.js 的几个文件读写和事件监听API
fs.exists()这个了解一下就好了,Node.js官方现在都不建议使用这个东西了,建议用 fs.stat() 或 fs.access()来替换。这个方法的功能就是检查给定的文件系统路径是否存在。此方法只返回一个布尔值,这是为什么不推荐使用这个方法,而推荐使用fs.access()的一个重要原因。fs.stat()可以查看文件或文件夹的属性,stats.isFile()判断这个是不是文件。fs.readFile()是用来读取文件的。与fs.readFile()功能差不多的还有,`fs.readFileSync()`,只是前者是异步的,而后者是同步的。同步操作的好处是简单,但是当读文件时就不
231 0
Http Server API路由请求到web程序
容器内web程序一般会绑定到http://0.0.0.0:{某监听端口}或http://+:{某监听端口},以确保使用容器IP可以访问到web应用。
92 0
使用Java程序消费SAP Leonardo的机器学习API
使用Java程序消费SAP Leonardo的机器学习API
49 0
如何禁用WordPress程序REST API功能且移除wp-json链接
WordPress是什么? WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。
1500 0
ASP.NET Core Web API 帮助页
ASP.NET Core Web API 帮助页
78 0
+关注
北斗云
风舒云卷,,北斗不移
文章
问答
文章排行榜
最热
最新
相关电子书
更多
基于Docker on Yarn系统的微服务实践
立即下载
深度学习+大数据 TensorFlow on Yarn
立即下载
Docker on Yarn 微服务实践
立即下载