【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.mzph.cn/diannao/41261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【anaconda】—“conda info“命令后conda配置和环境信息的理解

文章目录 conda配置和环境信息的理解 conda配置和环境信息的理解 安装anaconda成功后&#xff0c;打开cmd&#xff0c;输入"conda info"命令&#xff0c;结果显示如下&#xff1a; conda的配置和环境信息的输出。以下是对每个字段的解释&#xff1a; active environm…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问&#xff0c;默认情况下自动创建不存在的数据库&#xff0c;从而导致未授权访问。各种未授权访问的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很简单&#xff0c;启动参数添加 -ifExists &#xff0c;它的含义&#xff1a…

中电金信:加快企业 AI 平台升级,构建金融智能业务新引擎

在当今数字化时代的浪潮下&#xff0c;人工智能&#xff08;AI&#xff09;技术的蓬勃发展正为各行业带来前所未有的变革与创新契机。尤其是在金融领域&#xff0c;AI 模型的广泛应用已然成为提升竞争力、优化业务流程以及实现智能化转型的关键驱动力。然而&#xff0c;企业在积…

【C++ 】解决 C++ 语言报错:Null Pointer Dereferenc

文章目录 引言 在 C 编程中&#xff0c;空指针解引用&#xff08;Null Pointer Dereference&#xff09;是一种常见且危险的错误。当程序试图通过空指针访问内存时&#xff0c;会导致程序崩溃或产生不可预期的行为。本文将详细探讨空指针解引用的成因、检测方法及其预防和解决…

微信新宠!淘宝扭蛋机小程序,让购物更添乐趣

在移动互联网飞速发展的今天&#xff0c;微信小程序以其便捷性、即用即走的特点&#xff0c;迅速成为了用户日常生活中不可或缺的一部分。而在众多小程序中&#xff0c;一款名为“淘宝扭蛋机”的新晋“网红”&#xff0c;正以其独特的玩法和丰富的惊喜&#xff0c;为购物体验增…

【Hive实战】HiveMetaStore的指标采集告警

HiveMetaStore的指标采集告警 文章目录 HiveMetaStore的指标采集告警背景部署概要图 开启HiveMetaStore的JMX指标采集&#xff08;Hadoop2指标系统&#xff09;指标监控查询指标核心指标选择告警 遗留问题 背景 在远程模式的Metastore下&#xff0c;对其开启Hadoop2指标采集以…

简单配置VScode轻量级C++竞赛环境

1. 安装拓展 Chinese是中文&#xff0c;需要重启才可以运行&#xff0c;C/C拓展只是进行语法代码提示&#xff0c;不需要进行任何配置修改&#xff0c;默认即可。 2. 创建文件 如上图创建好各级文件夹&#xff0c;其中C是工作文件夹&#xff0c;.vscode是配置文件夹&#xff0…

【网络安全】Host碰撞漏洞原理+工具+脚本

文章目录 漏洞原理虚拟主机配置Host头部字段Host碰撞漏洞漏洞场景工具漏洞原理 Host 碰撞漏洞,也称为主机名冲突漏洞,是一种网络攻击手段。常见危害有:绕过访问控制,通过公网访问一些未经授权的资源等。 虚拟主机配置 在Web服务器(如Nginx或Apache)上,多个网站可以共…

学习测试2-方法

设计测试用例 设计测试用例的万能公式 (在没有需求文档的情况下&#xff09; 软件质量模型 效率就是性能 兼容性测试 浏览器 谷歌 IE 火狐 苹果 百度 Windows7 10 11 苹果系统 app 不同品牌 小米 vivo 华为 苹果 不同的操作系统 安卓 鸿蒙 苹果 -----------------------…

TikTok马来西亚直播网络怎么配置?

TikTok是一款全球流行的社交媒体应用&#xff0c;在东南亚地区拥有大量用户。在马来西亚这个多元化的国家&#xff0c;配置高效稳定的直播网络对TikTok的运营至关重要。 配置马来西亚直播网络的必要性 广泛的地理覆盖&#xff1a;马来西亚包括大片陆地和众多岛屿&#xff0c;网…

OpenSSH远程代码执行漏洞(CVE-2024-6387)

OpenSSH远程代码执行漏洞(CVE-2024-6387) 漏洞简介及影响范围 OpenSSH 远程代码执行漏洞&#xff08;CVE-2024-6387&#xff09;是影响 OpenSSH 服务器的一个高危安全漏洞&#xff0c;允许未经身份验证的远程攻击者在受影响的 Linux 系统上以 root 身份执行任意代码。这个严重…

性能压测 -优化 Nginx的动静分离

两件事情 1.以后将所有的项目的静态资源都应该放在nginx里面 2.nginx 规则&#xff1a;/static/***所有请求都有nginx直接返回 nginx 配置一下配置文件&#xff0c;然后把html 的静态资源&#xff0c;绑定好是Nginx优先级高的静态资源路径&#xff0c;就去交给nginx静态资源…

使用openssl生成公私钥并进行RSA加密

生成私钥 openssl genrsa -out private.pem 1024通过私钥生成公钥 openssl rsa -in private.pem -pubout -out public.pem通过公钥加密数据 openssl pkeyutl -encrypt -in data.txt -inkey public.pem -pubin -out encData.txtdata.txt &#xff1a;为我们要加密的数据enc…

skimage.io与matplotlib.image.imread读取图片的区别

以前没用过matplotlib的读图方式&#xff0c;今天在别人的工程里看到这个用法&#xff0c;自己改写别人工程时&#xff0c;怎么都找不到问题&#xff0c;最后在最初&#xff0c;开始读图的时候发现了问题。 目录 &#x1f337;&#x1f337;1.对于png格式的3波段uint8图像 &a…

Prometheus + Grafana 监控系统搭建使用指南-Nacos 接入 Prometheus 监控

Nacos 接入 Prometheus 监控 系列文章目录 Prometheus 的安装部署Grafana的安装部署Linux服务器接入Prometheus监控-Node Exporter 安装指南Prometheus 接入SpringBoot微服务监控Mysql 接入 Prometheus RocketMQ 接入Prometheus 监控ElasticSearch 接入 PrometheusNacos 接入…

在Android运行时切换Retrofit Base URL:简化开发环境与生产环境的切换

在运行时切换Retrofit Base URL:简化开发环境与生产环境的切换 在Android开发中,Retrofit是一个由Square开发的类型安全的HTTP客户端库。它为API认证和网络请求提供了一个强大的框架。然而,在开发过程中,我们常常需要在不同的环境(如开发环境和生产环境)之间切换Base UR…

解决刚申请下来的AWS EC2,无法用finalshell连接的问题

在AWS的命令页面创建一个root用户 切换到root 模式,输入密码 su root 不知道密码的可以使用一下命令来设置root用户的密码&#xff1a; su passwd root 再切换到root用户 su 修改配置文件 输入 vim /etc/ssh/sshd_config进入文件&#xff0c;键入’i’ &#xff0c;进行…

YOLOv8改进 添加CVPR2024 PKINet中注意力机制CAAttention

一、PKINet论文 论文地址:2403.06258 (arxiv.org) 二、CAAttention结构 CAA(Context Anchor Attention)注意力模块是一种用于捕捉长距离上下文信息的并行模块。 在计算机视觉领域中,上下文信息是指与目标物体或任务相关的周围环境和语境信息。上下文信息可以帮助我们更好…

【码银送书第二十二期】《Python数据分析从入门到精通(第2版)》

&#x1f490;大家好&#xff01;我是码银~&#xff0c;欢迎关注&#x1f490;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 前言 &#x1f340;丛书说明&#xff1a;“软件开发视频大讲堂‘’丛书第1版于2008年8月出版&#xff0c;因其编写细腻、易学实用…

MySql主从同步延迟怎么办?

文章目录 什么是MySQL主从架构主从架构的组成工作原理主从复制的步骤主从架构的优点主从架构的缺点 什么是主从同步延迟为什么会导致主从延迟主从延时的排查和解决如果发现主从数据不一致怎么办&#xff1f; 我们常说的业务量越来越大&#xff0c;I/O访问频率过高&#xff0c;单…