You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by gu...@apache.org on 2014/10/09 01:02:52 UTC

svn commit: r1630248 - in /hive/trunk: cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobMonitor.java

Author: gunther
Date: Wed Oct  8 23:02:51 2014
New Revision: 1630248

URL: http://svn.apache.org/r1630248
Log:
HIVE-8393: Handle SIGINT on Tez (Gunther Hagleitner, reviewed by Vikram Dixit K)

Added:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java
Modified:
    hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobMonitor.java

Modified: hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java
URL: http://svn.apache.org/viewvc/hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java?rev=1630248&r1=1630247&r2=1630248&view=diff
==============================================================================
--- hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java (original)
+++ hive/trunk/cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java Wed Oct  8 23:02:51 2014
@@ -60,6 +60,7 @@ import org.apache.hadoop.hive.ql.Driver;
 import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
 import org.apache.hadoop.hive.ql.exec.Utilities;
 import org.apache.hadoop.hive.ql.exec.mr.HadoopJobExecHelper;
+import org.apache.hadoop.hive.ql.exec.tez.TezJobExecHelper;
 import org.apache.hadoop.hive.ql.parse.HiveParser;
 import org.apache.hadoop.hive.ql.parse.VariableSubstitution;
 import org.apache.hadoop.hive.ql.processors.CommandProcessor;
@@ -384,6 +385,7 @@ public class CliDriver {
 
           // First, kill any running MR jobs
           HadoopJobExecHelper.killRunningJobs();
+          TezJobExecHelper.killRunningJobs();
           HiveInterruptUtils.interrupt();
         }
       });

Added: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java?rev=1630248&view=auto
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java (added)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobExecHelper.java Wed Oct  8 23:02:51 2014
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hive.ql.exec.tez;
+
+import java.lang.reflect.Method;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * TezJobExecHelper is a utility to safely call Tez functionality from
+ * common code paths. It will check if tez is available/installed before
+ * invoking the code.
+ */
+public class TezJobExecHelper {
+
+  private static final Log LOG = LogFactory.getLog(TezJobExecHelper.class.getName());
+
+  public static void killRunningJobs() {
+    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.TezJobMonitor")
+        .getMethod("killRunningJobs");
+      method.invoke(null, null);
+    }
+    catch (Exception e) {
+      // It is not available do nothing
+      LOG.debug("Could not stop tez dags: ", e);
+    }
+  }
+}

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobMonitor.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobMonitor.java?rev=1630248&r1=1630247&r2=1630248&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobMonitor.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezJobMonitor.java Wed Oct  8 23:02:51 2014
@@ -68,12 +68,7 @@ public class TezJobMonitor {
       @Override
       public void run() {
         for (DAGClient c: shutdownList) {
-          try {
-            System.err.println("Trying to shutdown DAG");
-            c.tryKillDAG();
-          } catch (Exception e) {
-            // ignore
-          }
+          TezJobMonitor.killRunningJobs();
         }
         try {
           for (TezSessionState s: TezSessionState.getOpenSessions()) {
@@ -212,6 +207,21 @@ public class TezJobMonitor {
     return rc;
   }
 
+  /**
+   * killRunningJobs tries to terminate execution of all
+   * currently running tez queries. No guarantees, best effort only.
+   */
+  public static void killRunningJobs() {
+    for (DAGClient c: shutdownList) {
+      try {
+        System.err.println("Trying to shutdown DAG");
+        c.tryKillDAG();
+      } catch (Exception e) {
+        // ignore
+      }
+    }
+  }
+
   private String printStatus(Map<String, Progress> progressMap, String lastReport, LogHelper console) {
     StringBuffer reportBuffer = new StringBuffer();