diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/tez/PerPoolTriggerValidatorRunnable.java ql/src/java/org/apache/hadoop/hive/ql/exec/tez/PerPoolTriggerValidatorRunnable.java index 8f29197c13..99e4401f0f 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/tez/PerPoolTriggerValidatorRunnable.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/tez/PerPoolTriggerValidatorRunnable.java @@ -20,8 +20,10 @@ import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import org.apache.hadoop.hive.ql.wm.SessionTriggerProvider; import org.apache.hadoop.hive.ql.wm.TriggerActionHandler; import org.slf4j.Logger; @@ -45,9 +47,10 @@ @Override public void run() { + ThreadFactory threadFactory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("PoolValidator %d").build(); + ScheduledExecutorService validatorExecutorService = Executors + .newScheduledThreadPool(sessionTriggerProviders.size(), threadFactory); try { - ScheduledExecutorService validatorExecutorService = Executors - .newScheduledThreadPool(sessionTriggerProviders.size()); for (Map.Entry entry : sessionTriggerProviders.entrySet()) { String poolName = entry.getKey(); if (!poolValidators.containsKey(poolName)) { @@ -61,6 +64,8 @@ public void run() { } catch (Throwable t) { // if exception is thrown in scheduled tasks, no further tasks will be scheduled, hence this ugly catch LOG.warn(PerPoolTriggerValidatorRunnable.class.getSimpleName() + " caught exception.", t); + } finally { + validatorExecutorService.shutdown(); } } } diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index 77d34047a4..32494ae257 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -1115,6 +1115,7 @@ public fb_status getStatus() { public void shutdown() { cleanupRawStore(); PerfLogger.getPerfLogger(false).cleanupPerfLogMetrics(); + ThreadPool.shutdown(); } @Override diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ThreadPool.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ThreadPool.java index d0fcd25fbb..2c9293eb08 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ThreadPool.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ThreadPool.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hive.metastore; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.metastore.conf.MetastoreConf; import org.slf4j.Logger; @@ -24,6 +25,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; /** * Utility singleton class to manage all the threads. @@ -31,7 +33,7 @@ public class ThreadPool { static final private Logger LOG = LoggerFactory.getLogger(ThreadPool.class); - private static ThreadPool self = null; + private static ThreadPool self; private static ScheduledExecutorService pool; public static synchronized ThreadPool initialize(Configuration conf) { @@ -43,8 +45,9 @@ public static synchronized ThreadPool initialize(Configuration conf) { } private ThreadPool(Configuration conf) { + ThreadFactory threadFactory = new ThreadFactoryBuilder().setDaemon(true).setNameFormat("Metastore Scheduled Worker %d").build(); pool = Executors.newScheduledThreadPool(MetastoreConf.getIntVar(conf, - MetastoreConf.ConfVars.THREAD_POOL_SIZE)); + MetastoreConf.ConfVars.THREAD_POOL_SIZE), threadFactory); } public static ScheduledExecutorService getPool() {