说到对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监控相关推荐

  1. 基于32位版CentOS6配置符合HA模式的CDH5.7.0的Hadoop+Yarn+HBase集群

    本文参考资料来源: 1,Hadoop完全分布式 -- HA配置 - WarmthYan - CSDN博客  https://blog.csdn.net/qq_33187206/article/deta ...

  2. hadoop hive hbase 集群搭建

    摘要:去年开发BI系统,其中ETL用到了Hadoop和Hive,我用三台Dell服务器,搭建了一个Hadoop集群,用于开发测试. 在接下来的几篇中,我会介绍些BI架构设计的内容,以及在开发中遇到的困 ...

  3. 停止Hadoop或HBase集群的脚本

    #!/bin/sh #echo "waring" #read NAME #等待用户输入并把输入的值付给NAME NAME=$1 #将脚本第一个参数赋给NAME #引用变量时加上&q ...

  4. 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 ...

  5. 使用ganglia监控hadoop及hbase集群

    介绍性内容来自:http://www.uml.org.cn/sjjm/201305171.asp 一.Ganglia简介 Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测 ...

  6. hadoop+Spark+hbase集群动态增加节点

    如果一个集群资源不够用需要扩展的时候怎么办,那么是可以不关机动态扩展的,具体操作如下: 已有集群: 192.168.111.11 lyy1 ---master节点 192.168.111.12 lyy ...

  7. 【笔记】Hadoop + zookeeper + hbase 集群搭建 简洁版

    版本: JAVA8 hadoop-3.1.1 hbase-2.0.2 zookeeper-3.4.10 集群配置:hadoop master 主备切换 hbase master 主备切换 zookee ...

  8. 如何构建 HBase 集群监控系统?

    2019独角兽企业重金招聘Python工程师标准>>> 公司有自己的监控系统,我们所要做的就是将 HBase 中我们关心的指标项发送到监控系统去,问题就转换为我们开发,采集并返回哪些 ...

  9. 用 Ganglia 监控基于 Biginsights 的 HBase 集群性能

    2019独角兽企业重金招聘Python工程师标准>>> BigInsights 和 HBase 简介 InfoSphere BigInsights 是 IBM 集成和开发的一个大数据 ...

最新文章

  1. python3程序下载安装_程序猿的语言,Python 3.7.0下载安装
  2. 云消防大数据_大数据在智慧消防中的应用
  3. MySQL的编译安装
  4. JS判断元素是否在数组内
  5. 084_html5WebWorkers
  6. UVA10305 Ordering Tasks
  7. FutureTask源码
  8. 使用AutoMake轻松生成Makefile
  9. wpf 文件上传到服务器_07-文件上传到阿里云OSS实战(一)
  10. 2014 UESTC Training for Data Structures D - 长使英雄泪满襟
  11. ML - 常用数学符号
  12. Word 2010/2013 菜单栏添加 MathType 菜单
  13. 回溯法 之 马周游(马跳日)问题
  14. ARM指令学习,王明学learn
  15. python-31:然而我发现结果并不是我想要的
  16. directshow方法关键帧java,如何实现DirectShow source filter
  17. GC bias GC偏好
  18. 微信wifi认证的实现方式和功能——时讯wifi认证
  19. 2020年最全的自动化测试面试题及答案--看完后吊打面试官!自动化测试是什么?自动化测试学什么?
  20. 浏览器的收藏夹在哪里打开

热门文章

  1. UIPinchGestureRecognizer 放大、缩小手势
  2. 用python给pdf批量添加水印,并给pdf加密
  3. 国产手机已经用上了 120W 快充技术,苹果还在用20W的原因
  4. OpenKE 的使用(四)— HolE 和 ComplEx 论文复现
  5. centos 7 安装时忘记打开网络导致开机网络无法自启动解决办法
  6. 内网主机通过公网域名解析访问内网服务器,存在什么问题,如何解决?
  7. 马桶下的压水花技术!!(爆笑)
  8. 笔记 | 制作windows10装机U盘,换固态硬盘,加内存条
  9. obs摄像头模糊_用OBS如何直播 照着学就行了
  10. 《数据结构教程(李春葆主编 第五版)》第七章源代码—树和二叉树