diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java index 37e4b9b..122df9f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Utilities.java @@ -215,6 +215,8 @@ public static String REDUCE_PLAN_NAME = "reduce.xml"; public static String MERGE_PLAN_NAME = "merge.xml"; public static final String INPUT_NAME = "iocontext.input.name"; + public static final String HAS_MAP_WORK = "has.map.work"; + public static final String HAS_REDUCE_WORK = "has.reduce.work"; public static final String MAPRED_MAPPER_CLASS = "mapred.mapper.class"; public static final String MAPRED_REDUCER_CLASS = "mapred.reducer.class"; public static final String HIVE_ADDED_JARS = "hive.added.jars"; @@ -299,6 +301,9 @@ public static void setMapWork(Configuration conf, MapWork work) { } public static MapWork getMapWork(Configuration conf) { + if (!conf.getBoolean(HAS_MAP_WORK, false)) { + return null; + } return (MapWork) getBaseWork(conf, MAP_PLAN_NAME); } @@ -307,6 +312,9 @@ public static void setReduceWork(Configuration conf, ReduceWork work) { } public static ReduceWork getReduceWork(Configuration conf) { + if (!conf.getBoolean(HAS_REDUCE_WORK, false)) { + return null; + } return (ReduceWork) getBaseWork(conf, REDUCE_PLAN_NAME); } @@ -359,6 +367,7 @@ public static void cacheBaseWork(Configuration conf, String name, BaseWork work, */ public static void setBaseWork(Configuration conf, String name, BaseWork work) { Path path = getPlanPath(conf, name); + setHasWork(conf, name); gWorkMap.get(conf).put(path, work); } @@ -474,6 +483,14 @@ private static BaseWork getBaseWork(Configuration conf, String name) { } } + private static void setHasWork(Configuration conf, String name) { + if (MAP_PLAN_NAME.equals(name)) { + conf.setBoolean(HAS_MAP_WORK, true); + } else if (REDUCE_PLAN_NAME.equals(name)) { + conf.setBoolean(HAS_REDUCE_WORK, true); + } + } + public static void setWorkflowAdjacencies(Configuration conf, QueryPlan plan) { try { Graph stageGraph = plan.getQueryPlan().getStageGraph(); @@ -536,6 +553,7 @@ private static Path setBaseWork(Configuration conf, BaseWork w, Path hiveScratch setPlanPath(conf, hiveScratchDir); Path planPath = getPlanPath(conf, name); + setHasWork(conf, name); OutputStream out = null; diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java index 197c1d2..aa23df8 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java @@ -2110,6 +2110,7 @@ JobConf createMockExecutionEnvironment(Path workDir, localFs.delete(mapXml, true); FSDataOutputStream planStream = localFs.create(mapXml); SerializationUtilities.serializePlan(mapWork, planStream); + conf.setBoolean(Utilities.HAS_MAP_WORK, true); planStream.close(); return conf; }