Преглед на файлове

HADOOP-5895. Fixes computation of count of merged bytes for logging. Contributed by Ravi Gummadi.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/trunk@779581 13f79535-47bb-0310-9956-ffa450edef68
Devaraj Das преди 16 години
родител
ревизия
3596b91a12
променени са 2 файла, в които са добавени 13 реда и са изтрити 8 реда
  1. 3 0
      CHANGES.txt
  2. 10 8
      src/mapred/org/apache/hadoop/mapred/Merger.java

+ 3 - 0
CHANGES.txt

@@ -707,6 +707,9 @@ Trunk (unreleased changes)
     HADOOP-5623. Fixes a problem to do with status messages getting overwritten
     in streaming jobs. (Rick Cox and Jothi Padmanabhan via ddas)
 
+    HADOOP-5895. Fixes computation of count of merged bytes for logging.
+    (Ravi Gummadi via ddas)
+
 Release 0.20.1 - Unreleased
 
   INCOMPATIBLE CHANGES

+ 10 - 8
src/mapred/org/apache/hadoop/mapred/Merger.java

@@ -513,9 +513,9 @@ class Merger {
             long startPos = segment.getPosition();
             boolean hasNext = segment.nextRawKey();
             long endPos = segment.getPosition();
-            startBytes += endPos - startPos;
             
             if (hasNext) {
+              startBytes += endPos - startPos;
               segmentsToMerge.add(segment);
               segmentsConsidered++;
             }
@@ -691,13 +691,15 @@ class Merger {
         segmentSizes.add(segments.get(i).getLength());
       }
       
-      if (includeFinalMerge) {
-        // just increment so that the following while loop iterates
-        // for 1 more iteration. This is to include final merge as part of
-        // the computation of expected input bytes of merges
-        n++;
-      }
-      while (n > f) {
+      // If includeFinalMerge is true, allow the following while loop iterate
+      // for 1 more iteration. This is to include final merge as part of the
+      // computation of expected input bytes of merges
+      boolean considerFinalMerge = includeFinalMerge;
+      
+      while (n > f || considerFinalMerge) {
+        if (n <=f ) {
+          considerFinalMerge = false;
+        }
         long mergedSize = 0;
         f = Math.min(f, segmentSizes.size());
         for (int j = 0; j < f; j++) {