Spill size underestimated when using a combiner, causing map tasks to fail
--------------------------------------------------------------------------

                 Key: MAPREDUCE-1363
                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-1363
             Project: Hadoop Map/Reduce
          Issue Type: Bug
          Components: task
    Affects Versions: 0.20.1
            Reporter: Miklos Erdelyi


Spill size could get underestimated when using certain combiners, causing map 
tasks to fail when disk space is really low in some mapred.local.dir.

When doing sortAndSpill(), MapOutputBuffer gets an output path through 
LocalDirAllocator which checks if the estimated size of the spill is available 
on any paths specified for intermediate data storage. In case a combiner is 
specified which emits key-value pairs having serialized size larger than the 
input key-value pairs' size, the size of the spill file is underestimated. If 
LocalDirAllocator selects a path for intermediate data storage which does not 
have enough space to hold the spilled records, an IOException is thrown and the 
map task fails.

This could be avoided by either improving the estimation of the size of the 
spill (increasing it by a constant amount or by constant percentage), or 
LocalDirAllocator could take into consideration a configuration parameter 
specifying how much extra unused space should be on the path returned by 
getLocalPathForWrite (similarly to dfs.datanode.du.reserved). In case there is 
no space left on a device designated for writing intermediate data on, the 
spill could be retried on a different device (without the failure of the map 
task).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to