You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by xu...@apache.org on 2015/01/13 03:16:01 UTC

svn commit: r1651265 - in /hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec: Utilities.java spark/SparkTask.java

Author: xuefu
Date: Tue Jan 13 02:16:01 2015
New Revision: 1651265

URL: http://svn.apache.org/r1651265
Log:
HIVE-9135: Cache Map and Reduce works in RSC [Spark Branch] (Jimmy via Xuefu)

Modified:
    hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
    hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java

Modified: hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java
URL: http://svn.apache.org/viewvc/hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java?rev=1651265&r1=1651264&r2=1651265&view=diff
==============================================================================
--- hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java (original)
+++ hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java Tue Jan 13 02:16:01 2015
@@ -31,7 +31,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.DataInput;
 import java.io.EOFException;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -236,8 +235,13 @@ public final class Utilities {
     // prevent instantiation
   }
 
-  private static Map<Path, BaseWork> gWorkMap = Collections
-      .synchronizedMap(new HashMap<Path, BaseWork>());
+  private static ThreadLocal<Map<Path, BaseWork>> gWorkMap =
+      new ThreadLocal<Map<Path, BaseWork>>() {
+    protected Map<Path, BaseWork> initialValue() {
+      return new HashMap<Path, BaseWork>();
+    }
+  };
+
   private static final String CLASS_NAME = Utilities.class.getName();
   private static final Log LOG = LogFactory.getLog(CLASS_NAME);
 
@@ -344,7 +348,7 @@ public final class Utilities {
    */
   public static void setBaseWork(Configuration conf, String name, BaseWork work) {
     Path path = getPlanPath(conf, name);
-    gWorkMap.put(path, work);
+    gWorkMap.get().put(path, work);
   }
 
   /**
@@ -356,15 +360,14 @@ public final class Utilities {
    * @throws RuntimeException if the configuration files are not proper or if plan can not be loaded
    */
   private static BaseWork getBaseWork(Configuration conf, String name) {
-    BaseWork gWork = null;
     Path path = null;
     InputStream in = null;
     try {
       path = getPlanPath(conf, name);
       LOG.info("PLAN PATH = " + path);
       assert path != null;
-      if (!gWorkMap.containsKey(path)
-        || HiveConf.getVar(conf, HiveConf.ConfVars.HIVE_EXECUTION_ENGINE).equals("spark")) {
+      BaseWork gWork = gWorkMap.get().get(path);
+      if (gWork == null) {
         Path localPath;
         if (conf.getBoolean("mapreduce.task.uberized", false) && name.equals(REDUCE_PLAN_NAME)) {
           localPath = new Path(name);
@@ -414,10 +417,9 @@ public final class Utilities {
         } else if (name.contains(MERGE_PLAN_NAME)) {
           gWork = deserializePlan(in, MapWork.class, conf);
         }
-        gWorkMap.put(path, gWork);
-      } else {
+        gWorkMap.get().put(path, gWork);
+      } else if (LOG.isDebugEnabled()) {
         LOG.debug("Found plan in cache for name: " + name);
-        gWork = gWorkMap.get(path);
       }
       return gWork;
     } catch (FileNotFoundException fnf) {
@@ -709,7 +711,7 @@ public final class Utilities {
       }
 
       // Cache the plan in this process
-      gWorkMap.put(planPath, w);
+      gWorkMap.get().put(planPath, w);
       return planPath;
     } catch (Exception e) {
       String msg = "Error caching " + name + ": " + e;
@@ -3629,15 +3631,15 @@ public final class Utilities {
     Path mapPath = getPlanPath(conf, MAP_PLAN_NAME);
     Path reducePath = getPlanPath(conf, REDUCE_PLAN_NAME);
     if (mapPath != null) {
-      gWorkMap.remove(mapPath);
+      gWorkMap.get().remove(mapPath);
     }
     if (reducePath != null) {
-      gWorkMap.remove(reducePath);
+      gWorkMap.get().remove(reducePath);
     }
   }
 
   public static void clearWorkMap() {
-    gWorkMap.clear();
+    gWorkMap.get().clear();
   }
 
   /**

Modified: hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java
URL: http://svn.apache.org/viewvc/hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java?rev=1651265&r1=1651264&r2=1651265&view=diff
==============================================================================
--- hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java (original)
+++ hive/branches/spark/ql/src/java/org/apache/hadoop/hive/ql/exec/spark/SparkTask.java Tue Jan 13 02:16:01 2015
@@ -124,6 +124,7 @@ public class SparkTask extends Task<Spar
       LOG.error(msg, e);
       rc = 1;
     } finally {
+      Utilities.clearWork(conf);
       if (sparkSession != null && sparkSessionManager != null) {
         rc = close(rc);
         try {