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

[hive] branch master updated: HIVE-24213: Incorrect exception in the Merge MapJoinTask into its child MapRedTask optimizer (reviewed by Zoltan Haindrich)

This is an automated email from the ASF dual-hosted git repository.

kuczoram pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new dd5716f  HIVE-24213: Incorrect exception in the Merge MapJoinTask into its child MapRedTask optimizer (reviewed by Zoltan Haindrich)
dd5716f is described below

commit dd5716f9340716872992808461420aed65f3c92b
Author: zmatyus <47...@users.noreply.github.com>
AuthorDate: Fri Oct 2 11:01:42 2020 +0200

    HIVE-24213: Incorrect exception in the Merge MapJoinTask into its child MapRedTask optimizer (reviewed by Zoltan Haindrich)
---
 .../ql/optimizer/physical/CommonJoinTaskDispatcher.java | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java
index 035a5fd..28e8d12 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/CommonJoinTaskDispatcher.java
@@ -58,6 +58,8 @@ import org.apache.hadoop.hive.ql.plan.MapredLocalWork;
 import org.apache.hadoop.hive.ql.plan.MapredWork;
 import org.apache.hadoop.hive.ql.plan.OperatorDesc;
 import org.apache.hadoop.hive.ql.plan.ReduceWork;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /*
  * Convert tasks involving JOIN into MAPJOIN.
@@ -105,6 +107,8 @@ import org.apache.hadoop.hive.ql.plan.ReduceWork;
  */
 public class CommonJoinTaskDispatcher extends AbstractJoinTaskDispatcher implements SemanticDispatcher {
 
+  protected final Logger LOG = LoggerFactory.getLogger(CommonJoinTaskDispatcher.class);
+
   HashMap<String, Long> aliasToSize = null;
 
   public CommonJoinTaskDispatcher(PhysicalContext context) {
@@ -224,14 +228,19 @@ public class CommonJoinTaskDispatcher extends AbstractJoinTaskDispatcher impleme
           " operator as the work associated with alias " + mapJoinAlias +
           ". Found a " + mapJoinAliasToWork.get(mapJoinAlias).getName() + " operator.");
     }
-    FileSinkOperator mapJoinTaskFileSinkOperator =
-        OperatorUtils.findSingleOperator(
-            mapJoinTaskTableScanOperator, FileSinkOperator.class);
-    if (mapJoinTaskFileSinkOperator == null) {
+
+    Set<FileSinkOperator> mapJoinTaskFileSinkOperators = 
+        OperatorUtils.findOperators(mapJoinTaskTableScanOperator, FileSinkOperator.class);
+    if (mapJoinTaskFileSinkOperators.isEmpty()) {
       throw new SemanticException("Cannot find the " + FileSinkOperator.getOperatorName() +
           " operator at the last operator of the MapJoin Task.");
     }
+    if (mapJoinTaskFileSinkOperators.size() > 1) {
+      LOG.warn("Multiple " + FileSinkOperator.getOperatorName() + " operators found at the last operator of the MapJoin Task.");
+      return;
+    }
     // The mapJoinTaskFileSinkOperator writes to a different directory
+    FileSinkOperator mapJoinTaskFileSinkOperator = mapJoinTaskFileSinkOperators.iterator().next();
     Path childMRPath = mapJoinTaskFileSinkOperator.getConf().getDirName();
     List<String> childMRAliases = childMapWork.getPathToAliases().get(childMRPath);
     if (childMRAliases == null || childMRAliases.size() != 1) {