Hadoop和HBase集群的JMX监控
说到对Hadoop和HBase的集群监控,大家知道的和用的最多的可能还是第三方的监控工具,cacti,ganglia,zabbix之类的。玩的深一些的,会用zenoss之类的。这些工具确实不错,也能发挥很大的作用,但时间长了总感觉监控粒度还是比较粗,不够详细。毕竟是第三方的监控,即便Hadoop自带了ganglia的接口,也还是觉得不够。
其实Hadoop本身是带有监控接口的,各公司的发行版还有自己定制的接口,不过可能知道的人就不太多了。这个不详细的看文档和源码一般是找不到的,属于隐藏属性。事实上,我写的EasyHadoop管理界面里面就用到了这个监控的接口,能够对整个集群有一个比较详细的状态监控,目前还在不断扩展。下一步会实现对Java进程的Heap使用的监控,这样对整个集群的性能调优就会起到比较重要作用。
其实这个接口特别简单,但是非常详细,也非常方便,就是JMX。
Hadoop的http监控端口基本所有人都知道,namenode 50070,jobtracker 50030,datanode 50075,tasktracker 50060。不过当用户访问这些端口的时候,会自动跳转到dfshealth.jsp或者jobtracker.jsp这样的监控页面。jmx的访问很简单,只需要把网页的名字换成jmx就可以了。
例如
将
http://your_namenode:50070/dfshealth.jsp
的地址替换成
http://your_namenode:50070/jmx
即可,其他如50030,50060等等,也依次类推,HBase的系统信息也可以用这种方法获取。
返回值全部是JSON,非常便于自己进行处理。返回的信息也非常详细,内存状态,内存池状态,java堆信息等等。甚至还有操作系统信息,版本,JVM版本信息等等,很全面。
但是这个接口获取的JSON往往很大,而且对于某一项的监控,整个抓一串JSON信息就太浪费了。所以,这又是一个隐藏属性了,只在Hadoop源码中可以了解到。源码在src/core/org/apache/hadoop/jmx中。
JMXJsonServlet.java的一个public类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
// Do the authorization
if (!HttpServer.hasAdministratorAccess(getServletContext(), request,
response)) {
return ;
}
response.setContentType( "application/json; charset=utf8" );
PrintWriter writer = response.getWriter();
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jg = jsonFactory.createJsonGenerator(writer);
jg.useDefaultPrettyPrinter();
jg.writeStartObject();
if (mBeanServer == null ) {
jg.writeStringField( "result" , "ERROR" );
jg.writeStringField( "message" , "No MBeanServer could be found" );
jg.close();
return ;
}
String qry = request.getParameter( "qry" );
if (qry == null ) {
qry = "*:*" ;
}
listBeans(jg, new ObjectName(qry));
jg.close();
} catch (IOException e) {
LOG.error( "Caught an exception while processing JMX request" , e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} catch (MalformedObjectNameException e) {
LOG.error( "Caught an exception while processing JMX request" , e);
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
}
|
从源码中可以看到json的获取可以带有http验证,另外还可以有一个参数叫qry。这个参数的值就是在获取整个长JSON中每个"name"key所对应的名字。也就是,可以用
http://your_tasktracker:50060/jmx?qry=GarbageCollector,name=PS MarkSweep
这种方式来获取关于JVM对内存垃圾回收的处理状态信息。很简单不是吗?
在EasyHadoop的Agent中获取HDFS和MR的实时状态监控就是通过JMX的接口,处理代码如下:
1
2
3
4
5
6
7
|
class EasyHadoopHandler:
def GetJmx( self ,host,port,qry):
url = 'http://' + host + ':' + port + '/jmx?qry=' + qry
jmx = urllib.urlopen(url)
json = jmx.read().replace( '\n' ,'')
jmx.close()
return json
|
由Central主动发起查询JMX的请求,Agent在获取了相关的监控信息后将json返回给Central,Central再用js将数据进行绘图实时返回给用户。
各发行版还有不同的监控接口,例如cloudera版还多加了一个叫metrics也不metrics2的接口。
这样来自己做Hadoop的监控,就比光使用cacti和ganglia就详细了许多。HBase也可对60010等端口进行同样的处理,进行监控。
Hadoop和HBase集群的JMX监控相关推荐
- 基于32位版CentOS6配置符合HA模式的CDH5.7.0的Hadoop+Yarn+HBase集群
本文参考资料来源: 1,Hadoop完全分布式 -- HA配置 - WarmthYan - CSDN博客 https://blog.csdn.net/qq_33187206/article/deta ...
- hadoop hive hbase 集群搭建
摘要:去年开发BI系统,其中ETL用到了Hadoop和Hive,我用三台Dell服务器,搭建了一个Hadoop集群,用于开发测试. 在接下来的几篇中,我会介绍些BI架构设计的内容,以及在开发中遇到的困 ...
- 停止Hadoop或HBase集群的脚本
#!/bin/sh #echo "waring" #read NAME #等待用户输入并把输入的值付给NAME NAME=$1 #将脚本第一个参数赋给NAME #引用变量时加上&q ...
- hadoop(八) - hbase集群环境搭建
1. 上传hbase安装包hbase-0.96.2-hadoop2-bin.tar.gz 2. 解压 tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /clo ...
- 使用ganglia监控hadoop及hbase集群
介绍性内容来自:http://www.uml.org.cn/sjjm/201305171.asp 一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测 ...
- hadoop+Spark+hbase集群动态增加节点
如果一个集群资源不够用需要扩展的时候怎么办,那么是可以不关机动态扩展的,具体操作如下: 已有集群: 192.168.111.11 lyy1 ---master节点 192.168.111.12 lyy ...
- 【笔记】Hadoop + zookeeper + hbase 集群搭建 简洁版
版本: JAVA8 hadoop-3.1.1 hbase-2.0.2 zookeeper-3.4.10 集群配置:hadoop master 主备切换 hbase master 主备切换 zookee ...
- 如何构建 HBase 集群监控系统?
2019独角兽企业重金招聘Python工程师标准>>> 公司有自己的监控系统,我们所要做的就是将 HBase 中我们关心的指标项发送到监控系统去,问题就转换为我们开发,采集并返回哪些 ...
- 用 Ganglia 监控基于 Biginsights 的 HBase 集群性能
2019独角兽企业重金招聘Python工程师标准>>> BigInsights 和 HBase 简介 InfoSphere BigInsights 是 IBM 集成和开发的一个大数据 ...
最新文章
- python3程序下载安装_程序猿的语言,Python 3.7.0下载安装
- 云消防大数据_大数据在智慧消防中的应用
- MySQL的编译安装
- JS判断元素是否在数组内
- 084_html5WebWorkers
- UVA10305 Ordering Tasks
- FutureTask源码
- 使用AutoMake轻松生成Makefile
- wpf 文件上传到服务器_07-文件上传到阿里云OSS实战(一)
- 2014 UESTC Training for Data Structures D - 长使英雄泪满襟
- ML - 常用数学符号
- Word 2010/2013 菜单栏添加 MathType 菜单
- 回溯法 之 马周游(马跳日)问题
- ARM指令学习,王明学learn
- python-31:然而我发现结果并不是我想要的
- directshow方法关键帧java,如何实现DirectShow source filter
- GC bias GC偏好
- 微信wifi认证的实现方式和功能——时讯wifi认证
- 2020年最全的自动化测试面试题及答案--看完后吊打面试官!自动化测试是什么?自动化测试学什么?
- 浏览器的收藏夹在哪里打开
热门文章
- UIPinchGestureRecognizer 放大、缩小手势
- 用python给pdf批量添加水印,并给pdf加密
- 国产手机已经用上了 120W 快充技术,苹果还在用20W的原因
- OpenKE 的使用(四)— HolE 和 ComplEx 论文复现
- centos 7 安装时忘记打开网络导致开机网络无法自启动解决办法
- 内网主机通过公网域名解析访问内网服务器,存在什么问题,如何解决?
- 马桶下的压水花技术!!(爆笑)
- 笔记 | 制作windows10装机U盘,换固态硬盘,加内存条
- obs摄像头模糊_用OBS如何直播 照着学就行了
- 《数据结构教程(李春葆主编 第五版)》第七章源代码—树和二叉树