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

svn commit: r1593463 - /hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConvertJoinMapJoin.java

Author: khorgath
Date: Thu May  8 23:40:01 2014
New Revision: 1593463

URL: http://svn.apache.org/r1593463
Log:
HIVE-6828: Hive tez bucket map join conversion interferes with map join conversion (Vikram Dixit K via Gunther Hagleitner)

Modified:
    hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConvertJoinMapJoin.java

Modified: hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConvertJoinMapJoin.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConvertJoinMapJoin.java?rev=1593463&r1=1593462&r2=1593463&view=diff
==============================================================================
--- hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConvertJoinMapJoin.java (original)
+++ hive/branches/branch-0.13/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ConvertJoinMapJoin.java Thu May  8 23:40:01 2014
@@ -80,25 +80,34 @@ public class ConvertJoinMapJoin implemen
     // reducers from the parent operators.
     int numBuckets = -1;
     int estimatedBuckets = -1;
-    for (Operator<? extends OperatorDesc>parentOp : joinOp.getParentOperators()) {
-      if (parentOp.getOpTraits().getNumBuckets() > 0) {
-        numBuckets = (numBuckets < parentOp.getOpTraits().getNumBuckets()) ? 
-            parentOp.getOpTraits().getNumBuckets() : numBuckets; 
+    if (context.conf.getBoolVar(HiveConf.ConfVars.HIVE_CONVERT_JOIN_BUCKET_MAPJOIN_TEZ)) {
+      for (Operator<? extends OperatorDesc>parentOp : joinOp.getParentOperators()) {
+        if (parentOp.getOpTraits().getNumBuckets() > 0) {
+          numBuckets = (numBuckets < parentOp.getOpTraits().getNumBuckets()) ? 
+              parentOp.getOpTraits().getNumBuckets() : numBuckets; 
+        }
+
+        if (parentOp instanceof ReduceSinkOperator) {
+          ReduceSinkOperator rs = (ReduceSinkOperator)parentOp;
+          estimatedBuckets = (estimatedBuckets < rs.getConf().getNumReducers()) ? 
+              rs.getConf().getNumReducers() : estimatedBuckets;
+        }
       }
-      ReduceSinkOperator rs = (ReduceSinkOperator)parentOp;
-      estimatedBuckets = (estimatedBuckets < rs.getConf().getNumReducers()) ? 
-          rs.getConf().getNumReducers() : estimatedBuckets;
-    }
 
-    if (numBuckets <= 0) {
-      numBuckets = estimatedBuckets;
       if (numBuckets <= 0) {
-        numBuckets = 1;
+        numBuckets = estimatedBuckets;
+        if (numBuckets <= 0) {
+          numBuckets = 1;
+        }
       }
+    } else {
+      numBuckets = 1;
     }
     LOG.info("Estimated number of buckets " + numBuckets);
     int mapJoinConversionPos = mapJoinConversionPos(joinOp, context, numBuckets);
     if (mapJoinConversionPos < 0) {
+      // we cannot convert to bucket map join, we cannot convert to 
+      // map join either based on the size
       return null;
     }
 
@@ -109,6 +118,12 @@ public class ConvertJoinMapJoin implemen
     }
 
     LOG.info("Convert to non-bucketed map join");
+    // check if we can convert to map join no bucket scaling.
+    mapJoinConversionPos = mapJoinConversionPos(joinOp, context, 1);
+    if (mapJoinConversionPos < 0) {
+      return null;
+    }
+
     MapJoinOperator mapJoinOp = convertJoinMapJoin(joinOp, context, mapJoinConversionPos);
     // map join operator by default has no bucket cols
     mapJoinOp.setOpTraits(new OpTraits(null, -1));