diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecMapper.java ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecMapper.java index a5beb633bcb..a3572ecc169 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecMapper.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/mr/ExecMapper.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.HashSet; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.conf.HiveConf; @@ -233,6 +235,7 @@ public static void setDone(boolean done) { public static class ReportStats implements Operator.OperatorFunc { private final Reporter rp; private final String groupName; + private Set alreadyReported = new HashSet<>(); public ReportStats(Reporter rp, Configuration conf) { this.rp = rp; @@ -241,10 +244,13 @@ public ReportStats(Reporter rp, Configuration conf) { @Override public void func(Operator op) { - Map opStats = op.getStats(); - for (Map.Entry e : opStats.entrySet()) { - if (rp != null) { - rp.incrCounter(groupName, e.getKey(), e.getValue()); + if (!alreadyReported.contains(op.getOperatorId())) { + alreadyReported.add(op.getOperatorId()); + Map opStats = op.getStats(); + for (Map.Entry e : opStats.entrySet()) { + if (rp != null) { + rp.incrCounter(groupName, e.getKey(), e.getValue()); + } } } }