Pārlūkot izejas kodu

MAPREDUCE-5211. Reducer intermediate files can collide during merge. Contributed by Jason Lowe

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.23@1482100 13f79535-47bb-0310-9956-ffa450edef68
Jason Darrell Lowe 12 gadi atpakaļ
vecāks
revīzija
c0027e279d

+ 3 - 0
hadoop-mapreduce-project/CHANGES.txt

@@ -24,6 +24,9 @@ Release 0.23.8 - UNRELEASED
     MAPREDUCE-5147. Maven build should create 
     hadoop-mapreduce-client-app-VERSION.jar directly (Robert Parker via tgraves)
 
+    MAPREDUCE-5211. Reducer intermediate files can collide during merge
+    (jlowe)
+
 Release 0.23.7 - 2013-04-18
 
   INCOMPATIBLE CHANGES

+ 5 - 2
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/task/reduce/MergeManager.java

@@ -505,7 +505,8 @@ public class MergeManager<K, V> {
   }
   
   private class OnDiskMerger extends MergeThread<MapOutput<K,V>,K,V> {
-    
+    private int mergeCount = 0;
+
     public OnDiskMerger(MergeManager<K, V> manager) {
       super(manager, ioSortFactor, exceptionReporter);
       setName("OnDiskMerger - Thread to merge on-disk map-outputs");
@@ -537,8 +538,10 @@ public class MergeManager<K, V> {
         ChecksumFileSystem.getChecksumLength(approxOutputSize, bytesPerSum);
 
       // 2. Start the on-disk merge process
+      ++mergeCount;
       Path outputPath = 
-        localDirAllocator.getLocalPathForWrite(inputs.get(0).toString(), 
+        localDirAllocator.getLocalPathForWrite(
+            new Path(reduceId.toString(), "diskmerge" + mergeCount).toString(),
             approxOutputSize, jobConf).suffix(Task.MERGED_OUTPUT_PREFIX);
       Writer<K,V> writer = 
         new Writer<K,V>(jobConf, rfs, outputPath,