【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.enabled
      if (conf.getBoolVar(ConfVars.METASTORE_METRICS)) {
        try {
          MetricsFactory.init(conf);
        } catch (Exception e) {
          // log exception, but ignore inability to start
          LOG.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 {
    @Override
    public void run() {
      Stopwatch sw = new Stopwatch();
      // 获取GC情况,GC次数和GC耗时ms
      Map<String, GcTimes> gcTimesBeforeSleep = getGcTimes();
      while (shouldRun) {
        sw.reset().start();
        try {
          // 监控线程自我休眠500ms
          Thread.sleep(SLEEP_INTERVAL_MS);
        } catch (InterruptedException ie) {
          return;
        }
        // 上次查询时间-减去休眠就是暂停的耗时
        long extraSleepTime = sw.elapsed(TimeUnit.MILLISECONDS) - SLEEP_INTERVAL_MS;
        Map<String, GcTimes> gcTimesAfterSleep = getGcTimes();
        // warnThresholdMs默认10000ms
        if (extraSleepTime > warnThresholdMs) {
          ++numGcWarnThresholdExceeded;
          LOG.warn(formatMessage(
            extraSleepTime, gcTimesAfterSleep, gcTimesBeforeSleep));
          // 指标jvm.pause.info-threshold进行+1
          incrementMetricsCounter(MetricsConstant.JVM_PAUSE_WARN, 1);
        } 
        // infoThresholdMs默认1000ms 
        else if (extraSleepTime > infoThresholdMs) {
          ++numGcInfoThresholdExceeded;
          LOG.info(formatMessage(
            extraSleepTime, gcTimesAfterSleep, gcTimesBeforeSleep));
           // 指标jvm.pause.warn-threshold进行+1
          incrementMetricsCounter(MetricsConstant.JVM_PAUSE_INFO, 1);
        }
        // jvm.pause.extraSleepTime 累计时间? ms
        incrementMetricsCounter(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>() {
                    @Override
                    public 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>() {
                    @Override
                    public Counter load(String key) {
                        Counter counter = new Counter();
                        metricRegistry.register(key, counter);
                        return counter;
                    }
                }
        );
        meters = CacheBuilder.newBuilder().build(
                new CacheLoader<String, Meter>() {
                    @Override
                    public 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 name
                                    applicationName, // Component name
                                    applicationName, // Component description
                                    "General"); // Name for each metric record
                    metrics2Reporter.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.mfbz.cn/a/774647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RAG 为什么需要文本分割(Chunking)

Picone上的一个博客&#xff0c;翻译过来学习一下&#xff0c;其中加入了一些个人的理解和调整&#xff0c;有兴趣更深入研究的可以看一下文章的原文。 为什么需要文本分割&#xff08;Chunking&#xff09; 在构建与LLM相关的应用程序时&#xff0c;Chunking是将大量文本分解…

anaconda命令大全

目录 查看所有虚拟环境查看某虚拟环境安装的包创建虚拟环境激活创建好的虚拟环境回到之前的环境删除创建的虚拟环境查看conda所在的位置、虚拟环境位置等信息conda修改虚拟环境所在的位置 查看所有虚拟环境 conda env list查看某虚拟环境安装的包 激活要查看的虚拟环境之后&a…

【黑马头条】 article微服务编译失败,包com.heima.model.common.article.dtos 不存在

解决办法&#xff0c; 将 model微服务重新打包编译下载 然后在service的pom文件里面加上版本号 这样编译就不会找不到啦

SQL注入【1】——通用漏洞/SQL注入/mysql跨库/ACCESS偏移

一、知识点: 1、脚本代码与数据库前置知识 2、Access数据库注入-简易&偏移 3、MYSQL数据库注入-简易:权限跨库 二、前置知识: &#xff08;一&#xff09;SQL注入漏洞产生原理分析 SQL注入产生条件&#xff1a;根本条件&#xff1a;可控变量、特定函数。 脚本代码在实现…

数学建模MATLAB绘图大全

最近快要开始一年一度的数学建模竞赛啦&#xff0c;接下来争取每天更一篇数学建模算法&#xff01;&#xff08;当然这是理想状态下&#xff09;&#xff0c;今天就先更一些MATLAB常用的绘图吧&#xff0c;论文赏心悦目的关键就在于丰富多彩的图&#xff0c;好看的图一定会成为…

MySql主从同步延迟怎么办?

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

2021-06-15 protues(ISIS)脉冲发生器仿真仪表使用

缘由这个脉冲发生器怎么连线_编程语言-CSDN问答

​埃文科技受邀出席2024 “数据要素×”生态大会​

2024“数据要素”生态大会&#xff08;以下简称“大会”&#xff09;于2024年6月30日在河南省郑州市举办&#xff0c;大会主题为“加快数据要素化进程 推动新质生产力发展”。 本次大会旨在搭建高水平交流合作平台、分享前沿观点、展示先进技术、交流实践经验&#xff0c;共同探…

开放式蓝牙耳机推荐,开放式耳机选购小技巧大公开!

跑步是我们生活中最常见的运动方式。在跑步中佩戴耳机往往能达到“事半功倍”的效果&#xff0c;如何去选择一款好的运动耳机便需要精挑细选了。作为一个开放式耳机资深玩家兼马拉松参与者&#xff0c;我个人觉得开放式耳机是最适合跑步的了&#xff0c;其开放式的设计更加适合…

数据结构之算法的时间复杂度

1.时间复杂度的定义 在计算机科学中&#xff0c;算法的时间复杂度是一个函数&#xff0c;它定量描述了算法的运行时间。一个算法所花费的时间与其中语句的执行次数成正比列&#xff0c;算法中的基本操作的执行次数&#xff0c;为算法的时间复杂度 例1&#xff1a; 计算Func1…

鸿蒙‘ohpm‘ 不是内部或外部命令,也不是可运行的程序-解决方案

&#x1f525; 博客主页&#xff1a; 小韩本韩&#xff01; ❤️ 感谢大家点赞&#x1f44d;收藏⭐评论✍️ 在鸿蒙的DevEco Studio的终端下输入 onpm -v 或者 你需要下载第三方ohpm包的时候提示‘ohpm‘ 不是内部或外部命令&#xff0c;也不是可运行的程序- 主要是因为我们…

【基于R语言群体遗传学】-6-表型计算等位基因频率、最大似然估计方法

到目前为止&#xff0c;我们主要讨论了等位基因和基因型频率&#xff0c;以及我们如何可以从一个推断出另一个。但是&#xff0c;如果我们不知道等位基因频率&#xff0c;只知道种群中存在哪些表型呢&#xff1f;如果我们足够幸运&#xff0c;知道哪些表型对应哪些基因型&#…

网络-calico问题分析

项目场景&#xff1a; calico-node日志提示 Failed to auto-detect host MTU - no interfaces matched the MTU interface pattern. To use auto-MTU, set mtuifacePattern to match your hosts’s interfaes. 同时&#xff0c;cali开头网卡的mtu是1440大小 原因分析&#xff…

扁鹊三兄弟的启示,探寻系统稳定的秘诀

一、稳定性的重要性 1. 公司收益的角度 从公司收益的视角审视&#xff0c;系统不稳定可能会引发直接损失。例如&#xff0c;当系统突然出现故障导致交易中断时&#xff0c;可能造成交易款项的紊乱、资金的滞留或损失&#xff0c;这不但会阻碍当前交易的顺利完成&#xff0c;还…

web安全的会议室管理系统-计算机毕业设计源码50331

目 录 摘要 1 绪论 1.1 开发背景与意义 1.2国内外研究现状 1.3 相关技术、工具简介 1.3.1 MySQL数据库的介绍 1.3.2 B/S架构的介绍 1.3.3 Java语言 1.3.4 SpringBoot框架 1.4论文结构与章节安排 2 会议室管理系统需求分析 2.1 可行性分析 2.1.1 技术可行性分析 2…

【Redis】真行,原来是这样啊! --Redis自动序列化和手动序列化的区别(存储结构、内存开销,实际写法)

对于Redis有两种序列化和反序列化的方式&#xff0c; 方式一&#xff1a; 一种是通过 注入RedisTemplate 对象&#xff0c;找个对象&#xff0c;通过配置类进行一定的配置&#xff0c;使得使用RedisTemplate 对象时&#xff0c;便会使用配置的那些键、值的序列化方式&#xff…

深度学习Week19——学习残差网络和ResNet50V2算法

文章目录 深度学习Week18——学习残差网络和ResNet50V2算法 一、前言 二、我的环境 三、论文解读 3.1 预激活设计 3.2 残差单元结构 四、模型复现 4.1 Residual Block 4.2 堆叠Residual Block 4.3. ResNet50V2架构复现 一、前言 &#x1f368; 本文为&#x1f517;365天深度学…

昇腾910B部署Qwen2-7B-Instruct进行流式输出【pytorch框架】NPU推理

目录 前情提要torch_npu框架mindsport框架mindnlp框架 下载模型国外国内 环境设置代码适配&#xff08;非流式&#xff09;MainBranch结果展示 代码适配&#xff08;流式&#xff09; 前情提要 torch_npu框架 官方未适配 mindsport框架 官方未适配 mindnlp框架 官方适配…

add_metrology_object_generic 添加测量模型对象。找两条直线,并计算两条线的夹角和两个线的总长度,转换成毫米单位

*添加测量模型对象 *将测量对象添加到测量模型中 *算子参数&#xff1a; *    MeasureHandle&#xff1a;输入测量模型的句柄&#xff1b; *    Shape&#xff1a;输入要测量对象的类型&#xff1b;默认值&#xff1a;‘circle’&#xff0c;参考值&#xff1a;‘circl…

淘宝扭蛋机小程序:打造新的扭蛋体验

扭蛋机行业近年来发展非常迅速&#xff0c;呈现出了明显的增长势头&#xff0c;深受年轻消费者的青睐。当下在消费市场中&#xff0c;年轻人占据了很大的份额&#xff0c;这也推动了扭蛋机市场的发展。如今&#xff0c;扭蛋机也正在向多个方向发展&#xff0c;不再局限于线下扭…