欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 【Hive实战】 HiveMetaStore的指标分析

【Hive实战】 HiveMetaStore的指标分析

2025/2/26 7:29:13 来源:https://blog.csdn.net/weixin_43820556/article/details/140020059  浏览:    关键词:【Hive实战】 HiveMetaStore的指标分析

HiveMetaStore的指标分析(一)

文章目录

  • HiveMetaStore的指标分析(一)
    • 背景
      • 目标部署架构
    • hive-site.xml相关配置
      • 元数据服务的指标相关配置
    • 源码部分(hive2.3系)
      • `JvmPauseMonitor.java`
      • `HiveMetaStore`的内部类`HMSHandler`
      • MetricsFactory的init(conf)方法
      • `CodahaleMetrics.java`
        • 具体指标对象
      • 指标导出
        • JsonFileReporter输出的文件内容示例
      • 其他
    • 腾讯云的hive-metastore指标
    • 参考资料

背景

对当前单独部署的HiveMetaStore服务进行指标监控。

目标部署架构

HiveServer2组
Metastore组
mysql组
HiveServer2_1
HiveServer2_2
HiveServer2_3
Metastore1
Metastore2
Metastore3
master
slave

验证步骤

  • 场景一:

    Metastore服务开启监控,指标输出方式采用默认。HiveServer2采用直连数据库的方式创建MetaStoreClient,其配置文件中也开启了metastore指标监控,同时开启WebUI。

    现象:每个HiveServer2服务都可以通过WebUI看到指标dump。但是,每个HiveServer2的实际访问的指标并非从Metastore组中获取的指标。是Client端侧的指标,且每个节点之间没有关联。

  • 场景二:

    Metastore服务开启监控,指标输出方式采用默认。。HiveServer2采用连接Metastore服务组的方式工作,其配置文件中也开启了metastore指标监控,同时开启WebUI。

    现象:每个HiveServer2服务都可以通过WebUI看到指标dump。但是没有Metastore相关的指标。

结论:以上两种方式,通过HiveServer2的WebUI服务都无法获取到单独的Metastore的服务指标。

  • 场景三:

    单纯的开启Metastore服务的监控,并将指标输出json文件中。

    现象:每个Metastore服务都生成自己的json文件,但是目前的版本在更新问价的时候会无法.json文件,只会定时的更新.json.tmp文件。

说明,以目标部署架构为例,单纯的MetaStore服务的指标是单纯的自己输出的。要么读取json文件,通过开启服务的JMX,在通过分别访问各个Metastore节点的JMX服务获取指标。

hive-site.xml相关配置

元数据服务的指标相关配置

  • 开启指标功能

    hive.metastore.metrics.enabledtrue

  • 指定指标功能实现类

    hive.service.metrics.classorg.apache.hadoop.hive.common.metrics.metrics2.CodahaleMetrics

  • 指标输出的类型

    hive.service.metrics.reporter"JMX,CONSOLE,JSON_FILE,HADOOP2"

  • 指标输出的JSON文件位置

    hive.service.metrics.file.location:"/tmp/report.json"

  • 指标输出的JSON文件更新频率

    hive.service.metrics.file.frequency5s

  • 指标输出到hadoop2组件指标中的名称

    hive.service.metrics.hadoop2.component"hivemetestore"

  • 指标输出到hadoop2组件指标中的时间间隔

    hive.service.metrics.hadoop2.frequency30s

源码部分(hive2.3系)

HiveMetaStore.java文件中main方法内,会根据配置去决定是否启动指标服务类。

      //Start Metrics for Standalone (Remote) Mode - hive.metastore.metrics.enabledif (conf.getBoolVar(ConfVars.METASTORE_METRICS)) {try {MetricsFactory.init(conf);} catch (Exception e) {// log exception, but ignore inability to startLOG.error("error in Metrics init: " + e.getClass().getName() + " "+ e.getMessage(), e);}}Lock startLock = new ReentrantLock();Condition startCondition = startLock.newCondition();AtomicBoolean startedServing = new AtomicBoolean();// 方法中会启动JvmPauseMonitor监控器startMetaStoreThreads(conf, startLock, startCondition, startedServing);// 方法中去实例化了HMSHandler,用户处理客户端过来的请求startMetaStore(cli.getPort(), ShimLoader.getHadoopThriftAuthBridge(), conf, startLock,startCondition, startedServing);

JvmPauseMonitor.java

用来监控JVM的暂停情况。通过Daemon线程,默认每隔500ms计算一次。jvm暂停统计级别分为warn和info级别。如果暂停超过1000ms则info级别次数+1,如果超过10000ms,则warn级别+1。

  private class Monitor implements Runnable {@Overridepublic void run() {Stopwatch sw = new Stopwatch();// 获取GC情况,GC次数和GC耗时msMap<String, GcTimes> gcTimesBeforeSleep = getGcTimes();while (shouldRun) {sw.reset().start();try {// 监控线程自我休眠500msThread.sleep(SLEEP_INTERVAL_MS);} catch (InterruptedException ie) {return;}// 上次查询时间-减去休眠就是暂停的耗时long extraSleepTime = sw.elapsed(TimeUnit.MILLISECONDS) - SLEEP_INTERVAL_MS;Map<String, GcTimes> gcTimesAfterSleep = getGcTimes();// warnThresholdMs默认10000msif (extraSleepTime > warnThresholdMs) {

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词