diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java index a544b93..caeef40 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java @@ -32,19 +32,36 @@ private static final Logger LOG = LoggerFactory.getLogger(TezJobExecHelper.class.getName()); - public static void killRunningJobs() { + private static final Method KILL_RUNNING_TEZ_JOBS; + + static { + Method method = null; try { Class.forName("org.apache.tez.dag.api.DAG"); // we have tez installed ClassLoader classLoader = TezJobExecHelper.class.getClassLoader(); - Method method = classLoader.loadClass("org.apache.hadoop.hive.ql.exec.tez.monitoring.TezJobMonitor") - .getMethod("killRunningJobs"); - method.invoke(null, null); + + method = classLoader + .loadClass("org.apache.hadoop.hive.ql.exec.tez.monitoring.TezJobMonitor") + .getDeclaredMethod("killRunningJobs"); + method.setAccessible(true); + } catch (Exception e) { + LOG.error("Error getting tez method", e); } - catch (Exception e) { + KILL_RUNNING_TEZ_JOBS = method; + } + + public static void killRunningJobs() { + try { + if (KILL_RUNNING_TEZ_JOBS != null) { + KILL_RUNNING_TEZ_JOBS.invoke(null, null); + } else { + LOG.warn("Unable to find tez method for killing jobs"); + } + } catch (Exception e) { // It is not available do nothing - LOG.debug("Could not stop tez dags: ", e); + LOG.error("Could not stop tez dags: ", e); } } } diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/tez/monitoring/TezJobMonitor.java ql/src/java/org/apache/hadoop/hive/ql/exec/tez/monitoring/TezJobMonitor.java index 1e54f6e..c0a068d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/tez/monitoring/TezJobMonitor.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/tez/monitoring/TezJobMonitor.java @@ -300,8 +300,11 @@ private static boolean hasInterruptedException(Throwable e) { /** * killRunningJobs tries to terminate execution of all * currently running tez queries. No guarantees, best effort only. + * + * {@link org.apache.hadoop.hive.ql.exec.tez.TezJobExecHelper#killRunningJobs()} makes use of + * this method via reflection. */ - private static void killRunningJobs() { + public static void killRunningJobs() { synchronized (shutdownList) { for (DAGClient c : shutdownList) { try {