diff --git a/common/src/java/org/apache/hadoop/hive/common/JvmPauseMonitor.java b/common/src/java/org/apache/hadoop/hive/common/JvmPauseMonitor.java index c3949f2..f933045 100644 --- a/common/src/java/org/apache/hadoop/hive/common/JvmPauseMonitor.java +++ b/common/src/java/org/apache/hadoop/hive/common/JvmPauseMonitor.java @@ -199,10 +199,12 @@ public void run() { } private void incrementMetricsCounter(String name, long count) { - try { - MetricsFactory.getMetricsInstance().incrementCounter(name, count); - } catch (Exception e) { - LOG.warn("Error Reporting JvmPauseMonitor to Metrics system", e); + if (MetricsFactory.isInitialized()) { + try { + MetricsFactory.getMetricsInstance().incrementCounter(name, count); + } catch (Exception e) { + LOG.warn("Error Reporting JvmPauseMonitor to Metrics system", e); + } } } } diff --git a/common/src/java/org/apache/hadoop/hive/common/metrics/LegacyMetrics.java b/common/src/java/org/apache/hadoop/hive/common/metrics/LegacyMetrics.java index 14f7afb..567505e 100644 --- a/common/src/java/org/apache/hadoop/hive/common/metrics/LegacyMetrics.java +++ b/common/src/java/org/apache/hadoop/hive/common/metrics/LegacyMetrics.java @@ -149,6 +149,7 @@ public void reopen() throws IOException { } } + private boolean initialized = false; private static final ThreadLocal> threadLocalScopes = new ThreadLocal>() { @@ -158,8 +159,6 @@ public void reopen() throws IOException { } }; - private boolean initialized = false; - public void init(HiveConf conf) throws Exception { if (!initialized) { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); diff --git a/common/src/java/org/apache/hadoop/hive/common/metrics/common/Metrics.java b/common/src/java/org/apache/hadoop/hive/common/metrics/common/Metrics.java index 13a5336..f66a1ef 100644 --- a/common/src/java/org/apache/hadoop/hive/common/metrics/common/Metrics.java +++ b/common/src/java/org/apache/hadoop/hive/common/metrics/common/Metrics.java @@ -39,6 +39,12 @@ */ public void deInit() throws Exception; + + /** + * @return true if Metrics system is initialized. + */ + public boolean isInitialized(); + /** * @param name * @throws IOException diff --git a/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsFactory.java b/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsFactory.java index 12a309d..64d1c4e 100644 --- a/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsFactory.java +++ b/common/src/java/org/apache/hadoop/hive/common/metrics/common/MetricsFactory.java @@ -45,4 +45,11 @@ public synchronized static void deInit() throws Exception { metrics.deInit(); } } + + public synchronized static boolean isInitialized() { + if (metrics == null) { + return false; + } + return metrics.isInitialized(); + } } diff --git a/common/src/java/org/apache/hadoop/hive/common/metrics/metrics2/CodahaleMetrics.java b/common/src/java/org/apache/hadoop/hive/common/metrics/metrics2/CodahaleMetrics.java index e59da99..0bfa63a 100644 --- a/common/src/java/org/apache/hadoop/hive/common/metrics/metrics2/CodahaleMetrics.java +++ b/common/src/java/org/apache/hadoop/hive/common/metrics/metrics2/CodahaleMetrics.java @@ -210,6 +210,10 @@ public synchronized void deInit() throws Exception { } } + public synchronized boolean isInitialized() { + return initialized; + } + public void startScope(String name) throws IOException { synchronized (this) { if (!initialized) { diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index 85a734c..e2c939b 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -748,7 +748,7 @@ private String startFunction(String function, String extraLogInfo) { incrementCounter(function); logInfo((getIpAddress() == null ? "" : "source:" + getIpAddress() + " ") + function + extraLogInfo); - if (hiveConf.getBoolVar(ConfVars.METASTORE_METRICS)) { + if (hiveConf.getBoolVar(ConfVars.METASTORE_METRICS) && MetricsFactory.isInitialized()) { try { MetricsFactory.getMetricsInstance().startScope(function); } catch (IOException e) { @@ -792,7 +792,7 @@ private void endFunction(String function, boolean successful, Exception e, } private void endFunction(String function, MetaStoreEndFunctionContext context) { - if (hiveConf.getBoolVar(ConfVars.METASTORE_METRICS)) { + if (hiveConf.getBoolVar(ConfVars.METASTORE_METRICS) && MetricsFactory.isInitialized()) { try { MetricsFactory.getMetricsInstance().endScope(function); } catch (IOException e) { diff --git a/service/src/java/org/apache/hive/service/server/HiveServer2.java b/service/src/java/org/apache/hive/service/server/HiveServer2.java index 7820ed5..724044c 100644 --- a/service/src/java/org/apache/hive/service/server/HiveServer2.java +++ b/service/src/java/org/apache/hive/service/server/HiveServer2.java @@ -108,6 +108,14 @@ public void run() { hiveServer2.stop(); } }); + + if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_METRICS_ENABLED) && !MetricsFactory.isInitialized()) { + try { + MetricsFactory.init(hiveConf); + } catch (Exception e) { + + } + } } public static boolean isHTTPTransportMode(HiveConf hiveConf) { @@ -307,9 +315,9 @@ public synchronized void stop() { HiveConf hiveConf = this.getHiveConf(); super.stop(); // Shutdown Metrics - if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_METRICS_ENABLED)) { + if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_METRICS_ENABLED) && MetricsFactory.isInitialized()) { try { - MetricsFactory.getMetricsInstance().deInit(); + MetricsFactory.deInit(); } catch (Exception e) { LOG.error("error in Metrics deinit: " + e.getClass().getName() + " " + e.getMessage(), e); @@ -355,8 +363,8 @@ private static void startHiveServer2() throws Throwable { server.init(hiveConf); server.start(); - if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_METRICS_ENABLED)) { - MetricsFactory.getMetricsInstance().init(hiveConf); + if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_METRICS_ENABLED) && !MetricsFactory.isInitialized()) { + MetricsFactory.init(hiveConf); } try { JvmPauseMonitor pauseMonitor = new JvmPauseMonitor(hiveConf);