Java jmx学习---Hive metric

1、问题

最近接到一个新需求,要求监控hive服务。监控这里,目前已知的大数据平台组件比如FusionInsight、CDH对服务的监控做的就很好,无奈,我司的产品属于小本经营,自己从apache里面拿来hive源码,然后直接改点配置文件,就准备上线。只是突然发现hive的监控还没有,目前只能调用hive 监控webui来监控,访问hive的jmx接口来做。但是我们自身还是想对hive的jmx进行一个包装,嵌入到自己的系统中。这里对新增了需求,要求对hive metric进行一番了解。

2、hive metric体系

源码所在位置:

Java jmx学习---Hive metric_第1张图片

metric的核心类为:CodahaleMetrics,依赖的是第三方度量库。该库的详细功能可以参考下文:

https://blog.csdn.net/houzhizhen/article/details/71540496

对于hive metric的源码解释可以看下面的博客:

https://blog.csdn.net/dabokele/article/details/84449789

3、疑问:

阅读上述博客以及相关源码后,可以知道hive metric的reporter有两种方式:json和jmx

在web界面可以通过访问http://hiveserver2Ip:10002/jmx就可以获取一个json结果。

这个json结果的实现类为:JMXJsonServlet,这个servlet只是tomcat中的servlet,用于实现http请求的处理,json结果的返回。但是并没有显示的看到CodahaleMetrics的调用。

不过,最后还是发现了一些蛛丝马迹,这里就需要对jmx的原理有一定的了解:

4、jmx基本原理

这里上个图,也是借鉴别人的博客,链接找不到了,如介意,我立马删掉,要发扬这种分享精神!

Java jmx学习---Hive metric_第2张图片

Java jmx学习---Hive metric_第3张图片

 一句话总结:

(1)java进程中需要启动MBeanServer,mbean需要注册在mbs中,每个mbs可以使用http协议、rmi协议进行访问,其实说到底都是对socket编程的一种封装

(2)java服务的业务server也是对socket编程的一种封装。

5、继续

回到上文中的问题JMXJsonServlet和CodahaleMetrics是怎么关联上的?

这里有个核心代码:

MBeanServer的初始化:

JMXJsonServlet类 使用ManagementFactory.getPlatformMBeanServer()来初始化,通过该方法获取的MBeanServer这个对象是一个单例

  @Override
  public void init() throws ServletException {
    // Retrieve the MBean server
    mBeanServer = ManagementFactory.getPlatformMBeanServer();
    jsonFactory = new JsonFactory();
  }

 CodahaleMetrics类中也使用了使用ManagementFactory.getPlatformMBeanServer()来初始化

 //register JVM metrics
    registerAll("gc", new GarbageCollectorMetricSet());
    registerAll("buffers", new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer()));
    registerAll("memory", new MemoryUsageGaugeSet());
    registerAll("threads", new ThreadStatesGaugeSet());
    registerAll("classLoading", new ClassLoadingGaugeSet());

目前只是发现了这样的关系,但是CodahaleMetrics类的比较庞大,目前还没有了解到它是具体如何使用的。后续继续补充

 

 

你可能感兴趣的:(metric,hive)