diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java index 2b1438d..c8003f5 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/HashTableSinkOperator.java @@ -263,7 +263,9 @@ private boolean hasFilter(int alias) { @Override public void closeOp(boolean abort) throws HiveException { try { - if (mapJoinTables != null) { + if (mapJoinTables == null) { + LOG.debug("mapJoinTables is null"); + } else { flushToFile(); } super.closeOp(abort); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java index 3ea9c96..8bffa9e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java @@ -235,8 +235,10 @@ public void processOp(Object row, int tag) throws HiveException { storage[pos] = null; } } - } catch (SerDeException e) { - throw new HiveException(e); + } catch (Exception e) { + String msg = "Unxpected exception: " + e.getMessage(); + LOG.error(msg, e); + throw new HiveException(msg, e); } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java index f1a8ee1..419c650 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java @@ -545,6 +545,7 @@ protected boolean allInitializedParentsAreClosed() { if(parent==null){ continue; } + LOG.debug("allInitializedParentsAreClosed? parent.state = " + parent.state); if (!(parent.state == State.CLOSE || parent.state == State.UNINIT)) { return false; } @@ -564,6 +565,7 @@ public void close(boolean abort) throws HiveException { // check if all parents are finished if (!allInitializedParentsAreClosed()) { + LOG.debug("Not all parent operators are closed. Not closing."); return; } @@ -584,6 +586,7 @@ public void close(boolean abort) throws HiveException { } for (Operator op : childOperators) { + LOG.debug("Closing child = " + op); op.close(abort); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java index 63f41ae..7e309ee 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/mr/MapredLocalTask.java @@ -348,14 +348,15 @@ private void startForward(boolean inputFileChangeSenstive, String bigTableBucket setUpFetchOpContext(fetchOp, alias, bigTableBucket); } + // get the root operator + Operator forwardOp = work.getAliasToWork().get(alias); if (fetchOp.isEmptyTable()) { //generate empty hashtable for empty table this.generateDummyHashTable(alias, bigTableBucket); + forwardOp.close(false); continue; } - // get the root operator - Operator forwardOp = work.getAliasToWork().get(alias); // walk through the operator tree while (!forwardOp.getDone()) { InspectableObject row = fetchOp.getNextRow(); @@ -374,6 +375,9 @@ private void startForward(boolean inputFileChangeSenstive, String bigTableBucket private void initializeOperators(Map fetchOpJobConfMap) throws HiveException { + for (Map.Entry> entry : work.getAliasToWork().entrySet()) { + LOG.debug("initializeOperators: " + entry.getKey() + ", children = " + entry.getValue().getChildOperators()); + } // this mapper operator is used to initialize all the operators for (Map.Entry entry : work.getAliasToFetchWork().entrySet()) { if (entry.getValue() == null) { @@ -418,6 +422,7 @@ private void initializeOperators(Map fetchOpJobConfMap) private void generateDummyHashTable(String alias, String bigBucketFileName) throws HiveException,IOException { + LOG.debug("generating dummy for " + alias); // find the (byte)tag for the map join(HashTableSinkOperator) Operator parentOp = work.getAliasToWork().get(alias); Operator childOp = parentOp.getChildOperators().get(0);