• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > 通过 JMX 获取Hadoop/HBase监控数据,jmxhadoop

通过 JMX 获取Hadoop/HBase监控数据,jmxhadoop

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含hadoop jmx,jmx,jmx 008,jmx 008磁力链接,jmx 010等服务器相关知识,网友希望可以进行参考

通过 JMX 获取Hadoop/HBase监控数据,jmxhadoop




概述

说到对Hadoop和 HBase的集群监控,大家知道的和用的最多的可能还是第三方的监控工具,cacti,ganglia,zabbix之类的。玩的深一些的,会用 zenoss之类的。这些工具确实不错,也能发挥很大的作用,但时间长了总感觉监控粒度还是比较粗,不够详细。毕竟是第三方的监控,即便Hadoop自带 了ganglia的接口,也还是觉得不够。

其实Hadoop本身是带有监控接口的,各公司的发行版还有自己定制的接口,不过可能知道的人就不太多了。

其实这个接口特别简单,但是非常详细,也非常方便,就是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版本信息等等,很全面。



实现

对于http://your_namenode:50070/jmx 这样地址的数据访问可以通过HttpClient进行数据访问,再将得到的数据通过

由于返回的Json数据量很大,而且基本上不可能全部需要,对于这种情况可以通过添加?qry方式获得部分数据,

例如http://your_namenode:60010/jmx?qry=Hadoop:service=HBase,name=Master,sub=Server


Maven配置:

        <dependency>

            <groupId>commons-httpclient</groupId>

            <artifactId>commons-httpclient</artifactId>

            <version>3.1</version>

        </dependency>

        <dependency>

            <groupId>org.json</groupId>

            <artifactId>json</artifactId>

            <version>20090211</version>

        </dependency>



Java类

该程序以获得Hbase的监控数据为例,关于HDFS的监控数据相似

/**
 * 作为HBase Master监控信息的source
 *
 * @author aihua.sun
 * @date 2015/4/6
 * @since V1.0
 */

import com.eric.agent.flume.model.HMasterRoleInfo;
import com.eric.agent.utils.AgentConstants;
import com.eric.agent.utils.MetricDataUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HBaseMasterDataProvider{
    protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
    private static final String server = "Hadoop:service=HBase,name=Master,sub=Server";
    private static final String assignment = "Hadoop:service=HBase,name=Master,sub=AssignmentManger";

    @Override
    public String extractMonitorData() {
        //TODO 通过调用API获得IP以及参数
        HMasterRoleInfo monitorDataPoint = new HMasterRoleInfo();
        String URL = "http://hostname:60010/jmx";

        JSONObject serverJson = qryJSonObjectFromJMX(URL, server);
        JSONObject assignJson = qryJSonObjectFromJMX(URL, assignment);

        try {
            monitorDataPoint.setNumRegionServers(serverJson.getLong("numRegionServers"));
            monitorDataPoint.setNumDeadRegionServers(serverJson.getLong("numDeadRegionServers"));
            monitorDataPoint.setClusterRequests(serverJson.getLong("clusterRequests"));
            monitorDataPoint.setRitCount(assignJson.getLong("ritCount"));
            monitorDataPoint.setRitCountOverThreshold(assignJson.getLong("ritCountOverThreshold"));
            monitorDataPoint.setRitOldestAge(assignJson.getLong("ritOldestAge"));

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return monitorDataPoint.toString();
    }

    public static void main(String[] args){
        System.out.println(new HBaseMasterDataProvider().extractMonitorData());
    }

    /**

     * 通过jmx获取监控数据

     *

     * @param URL

     * @param objectName

     * @return

     */

    public static JSONObject qryJSonObjectFromJMX(String URL, String objectName) {

        JSONObject jsonObject = null;

        try {

            StringBuilder sb = new StringBuilder(URL);

            sb.append("?qry=");

            sb.append(objectName);

            GetMethod getMethod = new GetMethod(sb.toString());

            int statusCode = httpClient.executeMethod(getMethod);

            String jsonStr = new String(getMethod.getResponseBody());

            jsonObject = new JSONObject(removeDuplicateContext(jsonStr)).getJSONArray("beans").getJSONObject(0);

        } catch (JSONException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return jsonObject;

    }
}



参考文章

JMXJsonServlet 介绍
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/http/jmx/JMXJsonServlet.html

Hadoop指标介绍 http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/Metrics.html#rpc











分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 通过 JMX 获取Hadoop/HBase监控数据,jmxhadoop

相关文章

  • 配置tomcat默认项目,tomcat默认项目
  • Hadoop之——数据类型,hadoop数据类型
  • Spark调研笔记第3篇,spark调研第3篇
  • R.net获取R中股票的dataframe中的data,r.netdataframe
  • MapReduce处理二次排序(分区-排序-分组),mapreduce二次
  • hive之实现列转行,hive列转行
  • 超人学院Hadoop大数据资源分享,超人学院hadoop分享
  • input from 表单提交 使用 属性 disabled=&quot;disabled&quot; 后台接收不到name=&quot;username&quot;的值,disabledusername
  • Ceph集群磁盘没有剩余空间的解决方法,ceph集群
  • 大师Geoff Hinton关于Deep Neural Networks的建议,geoffhinton

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • Apache Flink简介,apacheflink简介
    • Twitter发布新的大数据实时分析系统Heron,
    • 机器学习数学基础- gradient descent算法(下),gradientdescent
    • openstack-glance API 镜像管理的部分实现和例子,openstackglance
    • Elasticsearch 之 Facet,elasticsearchfacet
    • 什么是Code Review,CodeReview
    • **FASPOT 功能简介**,faspot功能简介
    • Hadoop启动时报错:Incorrect configuration: namenode address dfs.namenode.servicerpc-address or...,hadoopnamenode
    • (Kilo)Devstack Kilo版本localrc推荐,devstacklocalrc
    • 【Spark1.3官方翻译】Spark集群模式概览,spark1.3spark

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有