[ 
https://issues.apache.org/jira/browse/MAPREDUCE-2177?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12929747#action_12929747
 ] 

Chris Douglas commented on MAPREDUCE-2177:
------------------------------------------

The progress reporting during the merge is not on every record emitted. For 
jobs with combiners that emit far fewer records than they consume, it's 
possible that the framework fails to report progress, though (1) IIRC it 
reports at least once for every partition and (2) that wouldn't explain why the 
job is taking so much longer for a particular spill.

Adding some reporting in the reader could make sense, but we could use more 
information. Adding progress reporting only to prevent the job from being 
killed may be the wrong fix.

bq. But since we don't know how long each call to writer.append() / 
combinerRunner.combine() would take, there is no guarantee that we can prevent 
this issue from happening.

If the task is stuck, then it should be killed. I agree that the timeout 
mechanism's granularity is too coarse to measure all progress, but the overhead 
of measuring every event is too high to be the default.

bq. Reporting progress from a thread that isn't blocked by long write to disk 
or combiner call is one option. We can put some limit on the total amount of 
time spillDone.awaitNanos() calls take in the following loop:

Again, _that_ thread isn't making progress. It shouldn't prevent the task from 
getting killed if the merge is truly stuck.

Ted, please provide some details on the job you're running (w/ combiner? do 
reexecutions succeed? does this happen on particular machines? do other tasks 
complete normally while another is in this state?).

> The wait for spill completion should call Condition.awaitNanos(long 
> nanosTimeout)
> ---------------------------------------------------------------------------------
>
>                 Key: MAPREDUCE-2177
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-2177
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: tasktracker
>    Affects Versions: 0.20.2
>            Reporter: Ted Yu
>
> We sometimes saw maptask timeout in cdh3b2. Here is log from one of the 
> maptasks:
> 2010-11-04 10:34:23,820 INFO org.apache.hadoop.mapred.MapTask: Spilling map 
> output: buffer full= true
> 2010-11-04 10:34:23,820 INFO org.apache.hadoop.mapred.MapTask: bufstart = 
> 119534169; bufend = 59763857; bufvoid = 298844160
> 2010-11-04 10:34:23,820 INFO org.apache.hadoop.mapred.MapTask: kvstart = 
> 438913; kvend = 585320; length = 983040
> 2010-11-04 10:34:41,615 INFO org.apache.hadoop.mapred.MapTask: Finished spill 
> 3
> 2010-11-04 10:35:45,352 INFO org.apache.hadoop.mapred.MapTask: Spilling map 
> output: buffer full= true
> 2010-11-04 10:35:45,547 INFO org.apache.hadoop.mapred.MapTask: bufstart = 
> 59763857; bufend = 298837899; bufvoid = 298844160
> 2010-11-04 10:35:45,547 INFO org.apache.hadoop.mapred.MapTask: kvstart = 
> 585320; kvend = 731585; length = 983040
> 2010-11-04 10:45:41,289 INFO org.apache.hadoop.mapred.MapTask: Finished spill 
> 4
> Note how long the last spill took.
> In MapTask.java, the following code waits for spill to finish:
> while (kvstart != kvend) { reporter.progress(); spillDone.await(); }
> In trunk code, code is similar.
> There is no timeout mechanism for Condition.await(). In case the SpillThread 
> takes long before calling spillDone.signal(), we would see timeout.
> Condition.awaitNanos(long nanosTimeout) should be called.

-- 
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