当前位置: 首页 > news >正文

【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) {++numGcWarnThresholdExceeded;LOG.warn(formatMessage(extraSleepTime, gcTimesAfterSleep, gcTimesBeforeSleep));// 指标jvm.pause.info-threshold进行+1incrementMetricsCounter(MetricsConstant.JVM_PAUSE_WARN, 1);} // infoThresholdMs默认1000ms else if (extraSleepTime > infoThresholdMs) {++numGcInfoThresholdExceeded;LOG.info(formatMessage(extraSleepTime, gcTimesAfterSleep, gcTimesBeforeSleep));// 指标jvm.pause.warn-threshold进行+1incrementMetricsCounter(MetricsConstant.JVM_PAUSE_INFO, 1);}// jvm.pause.extraSleepTime 累计时间? msincrementMetricsCounter(MetricsConstant.JVM_EXTRA_SLEEP, extraSleepTime);totalGcExtraSleepTime += extraSleepTime;gcTimesBeforeSleep = gcTimesAfterSleep;}}private void incrementMetricsCounter(String name, long count) {Metrics metrics = MetricsFactory.getInstance();if (metrics != null) {try {metrics.incrementCounter(name, count);} catch (Exception e) {LOG.warn("Error Reporting JvmPauseMonitor to Metrics system", e);}}}}

HiveMetaStore的内部类HMSHandler

HMSHandler
-String startFunction(String function, String extraLogInfo)
-void endFunction(String function, MetaStoreEndFunctionContext context)

startFunctionendFunction是包裹以下元数据的操作,进行指标的采集控制。由这两个包裹的方法,除了本身的Timer指标(增加前缀api_)外,还会增加counters类型指标,不过在Timer指标名的基础上再增加active_calls_前缀,即active_calls_api_

以下指标还会增加前缀api_

  • 库相关

    1. create_database
    2. get_database
    3. alter_database
    4. drop_database
    5. get_databases
    6. get_all_databases
  • 表相关

    1. create_table
    2. drop_table
    3. get_table
    4. get_tables
    5. get_tables_by_type
    6. get_all_tables
    7. get_table_metas
    8. get_multi_table
    9. get_table_names_by_filter
    10. get_table_statistics_req
    11. alter_table
  • 分区相关

    1. append_partition
    2. append_partition_by_name
    3. drop_partition_by_name
    4. get_partitions_ps
    5. get_partitions_ps_with_auth
    6. get_partitions_names_ps
    7. add_partitions
    8. add_partition
    9. drop_partition
    10. get_partition
    11. alter_partition
    12. get_partition_with_auth
    13. get_partitions_pspec
    14. get_partition_names
    15. get_partition_by_name
    16. get_partitions_by_expr
    17. get_num_partitions_by_filter
    18. get_num_partitions_by_expr
    19. get_partitions_by_names
    20. get_partitions_by_filter
    21. get_partitions_by_filter_pspec
    22. get_partitions_statistics_req
  • 其他

    1. create_type
    2. get_type
    3. drop_type
    4. drop_constraint
    5. add_primary_key
    6. add_foreign_key
    7. get_column_privilege_set
    8. add_index
    9. alter_index
    10. drop_index_by_name
    11. get_index_by_name
    12. get_index_names
    13. get_indexes
    14. get_column_statistics_by_table
    15. get_fields_with_environment_context
    16. get_schema_with_environment_context
    17. get_column_statistics_by_partition
    18. write_column_statistics
    19. write_partition_column_statistics
    20. delete_column_statistics_by_partition
    21. delete_column_statistics_by_table
    22. get_config_value
    23. delete_column_statistics_by_partition
    24. cancel_delegation_token
    25. renew_delegation_token
    26. get_delegation_token
    27. add_token
    28. remove_token
    29. get_token for+XXX
    30. get_all_token_identifiers.
    31. add_master_key.
    32. update_master_key.
    33. remove_master_key.
    34. get_master_keys.
    35. partition_name_has_valid_characters
    36. get_functions
    37. get_all_functions
    38. get_function
    39. get_aggr_stats_for
    40. get_foreign_keys

例如get_database操作

    public Database get_database(final String name) throws NoSuchObjectException, MetaException {startFunction("get_database", ": " + name);Database db = null;Exception ex = null;try {db = get_database_core(name);firePreEvent(new PreReadDatabaseEvent(db, this));} catch (MetaException e) {ex = e;throw e;} catch (NoSuchObjectException e) {ex = e;throw e;} finally {endFunction("get_database", db != null, ex);}return db;}

MetricsFactory的init(conf)方法

/*** Initializes static Metrics instance. 目前默认的实现类是 org.apache.hadoop.hive.common.metrics.metrics2.CodahaleMetrics*/
public synchronized static void init(HiveConf conf) throws Exception {if (metrics == null) {Class metricsClass = conf.getClassByName(conf.getVar(HiveConf.ConfVars.HIVE_METRICS_CLASS));Constructor constructor = metricsClass.getConstructor(HiveConf.class);metrics = (Metrics) constructor.newInstance(conf);}
}

CodahaleMetrics.java

通过有参构造函数,实例化CodahaleMetrics。里面一共涉及4个指标类型。timers,counters,meters,gauges

    public CodahaleMetrics(HiveConf conf) {this.conf = conf;//Codahale artifacts are lazily-created.timers = CacheBuilder.newBuilder().build(new CacheLoader<String, com.codahale.metrics.Timer>() {@Overridepublic com.codahale.metrics.Timer load(String key) {Timer timer = new Timer(new ExponentiallyDecayingReservoir());metricRegistry.register(key, timer);return timer;}});counters = CacheBuilder.newBuilder().build(new CacheLoader<String, Counter>() {@Overridepublic Counter load(String key) {Counter counter = new Counter();metricRegistry.register(key, counter);return counter;}});meters = CacheBuilder.newBuilder().build(new CacheLoader<String, Meter>() {@Overridepublic Meter load(String key) {Meter meter = new Meter();metricRegistry.register(key, meter);return meter;}});gauges = new ConcurrentHashMap<String, Gauge>();//register JVM metrics - java虚拟机的相关指标集registerAll("gc", new GarbageCollectorMetricSet());registerAll("buffers", new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer()));registerAll("memory", new MemoryUsageGaugeSet());registerAll("threads", new ThreadStatesGaugeSet());registerAll("classLoading", new ClassLoadingGaugeSet());//Metrics reporter -进行指标的输出Set<MetricsReporting> finalReporterList = new HashSet<MetricsReporting>();// 默认的导出类型是JSON_FILE, JMX。List<String> metricsReporterNames = Lists.newArrayList(Splitter.on(",").trimResults().omitEmptyStrings().split(conf.getVar(HiveConf.ConfVars.HIVE_METRICS_REPORTER)));if (metricsReporterNames != null) {for (String metricsReportingName : metricsReporterNames) {try {MetricsReporting reporter = MetricsReporting.valueOf(metricsReportingName.trim().toUpperCase());finalReporterList.add(reporter);} catch (IllegalArgumentException e) {LOGGER.warn("Metrics reporter skipped due to invalid configured reporter: " + metricsReportingName);}}}initReporting(finalReporterList);}
具体指标对象
  • GarbageCollectorMetricSet:一组用于垃圾收集计数和运行时间的仪表。
  • BufferPoolMetricSet:一组测量JVM的直接和映射缓冲池的计数、使用情况和容量的指标。这些JMX对象仅在Java 7及以上版本上可用。
  • MemoryUsageGaugeSet:一组用于JVM内存使用的指标,包括堆与非堆内存的统计信息,以及特定于gc的内存池。
  • ThreadStatesGaugeSet:一组用于各种状态和死锁检测的线程数量的量规。
  • ClassLoadingGaugeSet:JVM类加载器使用情况的一组指标。
«interface»
MetricSet
Map getMetrics()
GarbageCollectorMetricSet
BufferPoolMetricSet
MemoryUsageGaugeSet
ThreadStatesGaugeSet
ClassLoadingGaugeSet

指标导出

    /*** Should be only called once to initialize the reporters*/private void initReporting(Set<MetricsReporting> reportingSet) {for (MetricsReporting reporting : reportingSet) {switch (reporting) {case CONSOLE:final ConsoleReporter consoleReporter = ConsoleReporter.forRegistry(metricRegistry).convertRatesTo(TimeUnit.SECONDS).convertDurationsTo(TimeUnit.MILLISECONDS).build();consoleReporter.start(1, TimeUnit.SECONDS);reporters.add(consoleReporter);break;case JMX:final JmxReporter jmxReporter = JmxReporter.forRegistry(metricRegistry).convertRatesTo(TimeUnit.SECONDS).convertDurationsTo(TimeUnit.MILLISECONDS).build();jmxReporter.start();reporters.add(jmxReporter);break;case JSON_FILE:final JsonFileReporter jsonFileReporter = new JsonFileReporter();jsonFileReporter.start();reporters.add(jsonFileReporter);break;case HADOOP2:String applicationName = conf.get(HiveConf.ConfVars.HIVE_METRICS_HADOOP2_COMPONENT_NAME.varname);long reportingInterval = HiveConf.toTime(conf.get(HiveConf.ConfVars.HIVE_METRICS_HADOOP2_INTERVAL.varname),TimeUnit.SECONDS, TimeUnit.SECONDS);final HadoopMetrics2Reporter metrics2Reporter = HadoopMetrics2Reporter.forRegistry(metricRegistry).convertRatesTo(TimeUnit.SECONDS).convertDurationsTo(TimeUnit.MILLISECONDS).build(DefaultMetricsSystem.initialize(applicationName), // The application-level nameapplicationName, // Component nameapplicationName, // Component description"General"); // Name for each metric recordmetrics2Reporter.start(reportingInterval, TimeUnit.SECONDS);break;}}}
«interface»
org.apache.hadoop.metrics2.MetricsSource
void getMetrics(MetricsCollector collector, boolean all)
«interface»
Reporter
«abstract»
ScheduledReporter
- final ScheduledExecutorService executor
+void start(long period, TimeUnit unit)
+public void report()
JmxReporter
JsonFileReporter
- java.util.Timer timer
+void start()
HadoopMetrics2Reporter
- SortedMap dropwizardGauges;
- SortedMap dropwizardCounters;
- SortedMap dropwizardHistograms;
- SortedMap dropwizardMeters;
- SortedMap dropwizardTimers;
void snapshotAllMetrics(MetricsRecordBuilder builder)
ConsoleReporter

在hive2版本有4类导出器

  • ConsoleReporter:通过调度线程,按周期将指标输出到日志里面。
  • JmxReporter:一个报告器,用于监听新指标,并将发送其作为名称标注的 MBeans。
  • JsonFileReporter:通过Timer,定时调度,将指标写入目标文件中。
  • HadoopMetrics2Reporter:通过调度线程,按周期将指标更新到度量对象dropwizardGauges,dropwizardCounters,dropwizardHistograms,dropwizardMeters,dropwizardTimers中,再由hadoop2的指标系统去获取转换由 dropwizard 收集的当前指标,并将其添加到Hadoop2的指标系统中。
JsonFileReporter输出的文件内容示例
  • 回收

    • gc.PS-MarkSweep.count:标记次数
    • gc.PS-MarkSweep.time:标记耗时ms
    • gc.PS-Scavenge.count:清除次数
    • gc.PS-Scavenge.time:清除耗时ms
  • 内存

    • memory.heap.committed:JVM 已经提交的 HeapMemory 的大小, byte

    • memory.heap.init:JVM 初始 HeapMem 的大小

    • memory.heap.usage:已使用内存占比

    • memory.heap.max:JVM 配置的 HeapMemory 的大小

    • memory.heap.used:已使用堆内存大小, byte

    • memory.non-heap.committed:JVM 当前已经提交的 NonHeapMemory 的大小, byte

    • memory.non-heap.init:JVM 初始 NonHeapMem 的大小, byte

    • memory.non-heap.max:JVM 配置的 NonHeapMemory 的数大小, byte

    • memory.non-heap.usage:已使用NonHeapMemory 内存占比

    • memory.non-heap.used:JVM 当前已经使用的 NonHeapMemory 的大小, byte

    • memory.pools.Code-Cache.usage:代码缓存区使用占比

    • memory.pools.Compressed-Class-Space.usage:压缩类空间空间使用占比

    • memory.pools.Metaspace.usage:Metaspace 区内存使用占比

    • memory.pools.PS-Eden-Space.usage:Eden区内存使用占比

    • memory.pools.PS-Old-Gen.usage:Old区内存使用占比

    • memory.pools.PS-Survivor-Space.usage:Survivo区内存使用占比

    • memory.total.committed:保证可用于堆或非堆的总内存量

    • memory.total.init:堆或非堆初始化的内存量

    • memory.total.max:堆或非堆配置的最大中内存量

    • memory.total.used:堆或非堆使用的总内存量

  • 线程

    • threads.count:总线程数
    • threads.daemon.count:常驻线程数
    • threads.deadlock.count:死锁线程数
  • counters下active_calls_*系列:正在执行的方法的个数,方法主要在HiveMetaStore的内部类HMSHandler中。

  • timers下api_系列:执行的方法响应(个数,平均、最大、最小、中位数耗时等等),方法主要在HiveMetaStore的内部类HMSHandler中。

{"version" : "3.0.0","gauges" : {"buffers.direct.capacity" : {"value" : 0},"buffers.direct.count" : {"value" : 0},"buffers.direct.used" : {"value" : 0},"buffers.mapped.capacity" : {"value" : 0},"buffers.mapped.count" : {"value" : 0},"buffers.mapped.used" : {"value" : 0},"classLoading.loaded" : {"value" : 6932},"classLoading.unloaded" : {"value" : 0},"gc.PS-MarkSweep.count" : {"value" : 2},"gc.PS-MarkSweep.time" : {"value" : 250},"gc.PS-Scavenge.count" : {"value" : 5},"gc.PS-Scavenge.time" : {"value" : 92},"init_total_count_dbs" : {"value" : 489},"init_total_count_partitions" : {"value" : 51089},"init_total_count_tables" : {"value" : 13733},"memory.heap.committed" : {"value" : 991428608},"memory.heap.init" : {"value" : 1073741824},"memory.heap.max" : {"value" : 991428608},"memory.heap.usage" : {"value" : 0.22776332070498415},"memory.heap.used" : {"value" : 225811072},"memory.non-heap.committed" : {"value" : 62717952},"memory.non-heap.init" : {"value" : 2555904},"memory.non-heap.max" : {"value" : -1},"memory.non-heap.usage" : {"value" : -6.1740872E7},"memory.non-heap.used" : {"value" : 61740872},"memory.pools.Code-Cache.usage" : {"value" : 0.04560165405273438},"memory.pools.Compressed-Class-Space.usage" : {"value" : 0.004726290702819824},"memory.pools.Metaspace.usage" : {"value" : 0.9850643484933036},"memory.pools.PS-Eden-Space.usage" : {"value" : 0.5518231919863521},"memory.pools.PS-Old-Gen.usage" : {"value" : 0.07657499299391471},"memory.pools.PS-Survivor-Space.usage" : {"value" : 0.9316617525540866},"memory.total.committed" : {"value" : 1054146560},"memory.total.init" : {"value" : 1076297728},"memory.total.max" : {"value" : 991428607},"memory.total.used" : {"value" : 287551944},"threads.blocked.count" : {"value" : 0},"threads.count" : {"value" : 27},"threads.daemon.count" : {"value" : 16},"threads.deadlock.count" : {"value" : 0},"threads.deadlocks" : {"value" : [ ]},"threads.new.count" : {"value" : 0},"threads.runnable.count" : {"value" : 4},"threads.terminated.count" : {"value" : 0},"threads.timed_waiting.count" : {"value" : 7},"threads.waiting.count" : {"value" : 16}},"counters" : {"active_calls_api_get_database" : {"count" : 0},"active_calls_api_get_tables" : {"count" : 0},"active_calls_api_init" : {"count" : 0},"active_calls_api_set_ugi" : {"count" : 0},"jvm.pause.extraSleepTime" : {"count" : 6},"open_connections" : {"count" : 1}},"histograms" : { },"meters" : { },"timers" : {"api_get_database" : {"count" : 54,"max" : 99.228759,"mean" : 11.107232182804301,"min" : 10.091598,"p50" : 11.098374,"p75" : 11.503314,"p95" : 12.130782,"p98" : 12.130782,"p99" : 12.130782,"p999" : 12.913863,"stddev" : 0.6771821794059291,"m15_rate" : 0.0,"m1_rate" : 0.0,"m5_rate" : 0.0,"mean_rate" : 0.0,"duration_units" : "milliseconds","rate_units" : "calls/millisecond"},"api_get_tables" : {"count" : 18,"max" : 31.114395,"mean" : 9.939109200622983,"min" : 9.404240999999999,"p50" : 9.841852,"p75" : 10.122354,"p95" : 10.122354,"p98" : 10.122354,"p99" : 10.122354,"p999" : 10.203377999999999,"stddev" : 0.18434488642295546,"m15_rate" : 0.0,"m1_rate" : 0.0,"m5_rate" : 0.0,"mean_rate" : 0.0,"duration_units" : "milliseconds","rate_units" : "calls/millisecond"},"api_init" : {"count" : 1,"max" : 3225.4620339999997,"mean" : 3225.4620339999997,"min" : 3225.4620339999997,"p50" : 3225.4620339999997,"p75" : 3225.4620339999997,"p95" : 3225.4620339999997,"p98" : 3225.4620339999997,"p99" : 3225.4620339999997,"p999" : 3225.4620339999997,"stddev" : 0.0,"m15_rate" : 0.0,"m1_rate" : 0.0,"m5_rate" : 0.0,"mean_rate" : 0.0,"duration_units" : "milliseconds","rate_units" : "calls/millisecond"},"api_set_ugi" : {"count" : 1,"max" : 0.284408,"mean" : 0.284408,"min" : 0.284408,"p50" : 0.284408,"p75" : 0.284408,"p95" : 0.284408,"p98" : 0.284408,"p99" : 0.284408,"p999" : 0.284408,"stddev" : 0.0,"m15_rate" : 0.0,"m1_rate" : 0.0,"m5_rate" : 0.0,"mean_rate" : 0.0,"duration_units" : "milliseconds","rate_units" : "calls/millisecond"}}
}

其他

#这个类定义了Hive进程生成的一些指标。
org.apache.hadoop.hive.common.metrics.common.MetricsConstant#可以用来度量和记录一段代码所花费的时间。
org.apache.hadoop.hive.ql.log.PerfLogger

腾讯云的hive-metastore指标

标题指标名称指标单位指标含义
GC 次数YGCYoung GC 次数
FGCFull GC 次数
GC 时间FGCTsFull GC 消耗时间
GCTs垃圾回收时间消耗
YGCTsYoung GC 消耗时间
内存区域占比S0%Survivor 0区内存使用占比
E%Eden 区内存使用占比
CCS%Compressed class space 区内存使用占比
S1%Survivor 1区内存使用占比
O%Old 区内存使用占比
M%Metaspace 区内存使用占比
JVM 内存MemHeapUsedMMBJVM 当前已经使用的 HeapMemory 的数量
MemHeapCommittedMMBJVM 已经提交的 HeapMemory 的数量
MemHeapMaxMMBJVM 配置的 HeapMemory 的数量
MemHeapInitMMBJVM 初始 HeapMem 的数量
MemNonHeapUsedMMBJVM 当前已经使用的 NonHeapMemory 的数量
MemNonHeapCommittedMMBJVM 当前已经提交的 NonHeapMemory 的数量
MemNonHeapInitMMBJVM 初始 NonHeapMem 的数量
文件描述符数OpenFileDescriptorCount已打开文件描述符数量
MaxFileDescriptorCount最大文件描述符数
CPU 利用率ProcessCpuLoad%进程 CPU 利用率
SystemCpuLoad%系统 CPU 利用率
CPU 使用时间占比CPURateseconds/secondCPU 使用时间占比
工作线程数DaemonThreadCount守护线程数
ThreadCount线程总数
CPU 累计使用时间ProcessCpuTimemsCPU 累计使用时间
进程运行时长Uptimes进程运行时长
GC 额外睡眠时间ExtraSleepTimems/sGC 额外睡眠时间
alter table 请求时间HIVE.HMS.API_ALTER_TABLEmsalter table 请求平均时间
alter table with env context 请求时间HIVE.HMS.API_ALTER_TABLE_WITH_ENV_CONTEXTmsalter table with env context 请求平均时间
create table 请求时间HIVE.HMS.API_CREATE_TABLEmscreate table 请求平均时间
create table with env context 请求时间HIVE.HMS.API_CREATE_TABLE_WITH_ENV_CONTEXTmscreate table with env context 请求平均时间
drop table 请求时间HIVE.HMS.API_DROP_TABLEmsdrop table 平均请求时间
drop table with env context 请求时间HIVE.HMS.API_DROP_TABLE_WITH_ENV_CONTEXTmsdrop table with env context 平均请求时间
get table 请求时间HIVE.HMS.API_GET_TABLEmsget table 平均请求时间
get tables 请求时间HIVE.HMS.API_GET_TABLESmsget tables 平均请求时间
get multi table 请求时间HIVE.HMS.API_GET_MULTI_TABLEmsget multi table 平均请求时间
get table req 请求时间HIVE.HMS.API_GET_TABLE_REQmsget table req 平均请求时间
get database 请求时间HIVE.HMS.API_GET_DATABASEmsget database 平均请求时间
get databases 请求时间HIVE.HMS.API_GET_DATABASESmsget databases 平均请求时间
get all database 请求时间HIVE.HMS.API_GET_ALL_DATABASESmsget all databases 平均请求时间
get all functions 请求时间HIVE.HMS.API_GET_ALL_FUNCTIONSmsget all functions 平均请求时间
当前活跃 create table 请求数HIVE.HMS.ACTIVE_CALLS_API_CREATE_TABLE当前活跃 create table 请求数
当前活跃 drop table 请求数HIVE.HMS.ACTIVE_CALLS_API_DROP_TABLE当前活跃 drop table 请求数
当前活跃 alter table 请求数HIVE.HMS.ACTIVE_CALLS_API_ALTER_TABLE当前活跃 alter table 请求数

参考资料

相关CWiki

  1. Hive+Metrics:指标的总览页。提供部分指标的issues链接。

  2. WebUIforHiveServer2:介绍WebUI可以查询展示指标。

  3. ConfigurationProperties-Metrics :介绍指标的部分配置。

http://www.lryc.cn/news/392076.html

相关文章:

  • 【Linux系统】CUDA的安装与graspnet环境配置遇到的问题
  • 滤波算法学习笔记
  • 【机器学习】机器学习的重要方法——线性回归算法深度探索与未来展望
  • 百度云智能媒体内容分析一体机(MCA)建设
  • 笔记本电脑部署VMware ESXi 6.0系统
  • k8s 中间件
  • 如何 提升需求确定性
  • 探索Sui的面向对象模型和Move编程语言
  • 【vue动态组件】VUE使用component :is 实现在多个组件间来回切换
  • springboot dynamic配置多数据源
  • 线性代数知识点搜刮
  • 景区智能厕所系统,打造智能化,人性化公共空间
  • Windows中Git的使用(2024最新版)
  • 【pytorch12】什么是梯度
  • 南京,协同开展“人工智能+”行动
  • Selenium IDE 的使用指南
  • vue配置sql规则
  • 面试官:Redis执行lua脚本能保证原子性吗?
  • 基于Chrome扩展的浏览器可信事件与网页离线PDF导出
  • 马拉松报名小程序的设计
  • python使用pywebview集成vue3和element-plus开发桌面系统框架
  • C++线程的使用
  • 算法库应用--寻找最长麦穗
  • ython 使用 cx_Freeze 打包,不想要打包文件中能直接看到依赖的代码,如何处理
  • 某DingTalk企典 - Token
  • 手写一个类似@RequestParam的注解(用来接收请求体的参数)
  • 【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code
  • 【ajax实战07】文章筛选功能
  • promise.all和promise.race的区别
  • Python爬取豆瓣电影+数据可视化,爬虫教程!