[ 
https://issues.apache.org/jira/browse/MAPREDUCE-1276?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Amareshwari Sriramadasu updated MAPREDUCE-1276:
-----------------------------------------------

    Attachment: patch-1276.txt

When I tried to simulate a read timeout for one of the attempts on a 
TaskTracker, I hit  few bugs with new shuffle code.
1. Connection logic is wrong as the jira description says. So, both connect 
timeout and read timeout are treated as read timeout now.
Solution: Separate connect() and getInputStream() into different blocks as in 
pre-0.21.

2. If there is connect or read timeout during draining the input stream of the 
connection, the reducer fails.
Solution : If there is any timeout here, we should ignore and let the reducer 
run.

3. If a tracker ran map tasks 1, 2, 3 and  tracker times out reading the output 
of 2nd task, the reducer penalizes the 1st task. This is because the reducer 
tries to read all the three map outputs in one connection. 
Solution: After reading every map output, we should do a flush() so that the 
correct map will be penalized for any error.

4. If a successful task is marked as FAILED because of "Too many fetch 
failures", the task is not removed from reduce.Fetcher's known pending maps. 
So, reducer will indefinitely try to read the FAILED map.
Solution: EventFetcher does not add FAILED/KILLED TaskCompletionEvents to 
obsolete maps. We should add them also as we did in pre-0.21.

Attached patch fixes all the above bugs.


> Shuffle connection logic needs correction 
> ------------------------------------------
>
>                 Key: MAPREDUCE-1276
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-1276
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: task
>    Affects Versions: 0.21.0
>            Reporter: Jothi Padmanabhan
>            Assignee: Amareshwari Sriramadasu
>            Priority: Blocker
>             Fix For: 0.21.0
>
>         Attachments: patch-1276.txt
>
>
> While looking at the code with Amareshwari, we realized that  
> {{Fetcher#copyFromHost}} marks connection as successful when 
> {{url.openConnection}} returns. This is wrong. Connection is done inside 
> implicitly inside {{getInputStream}}; we need to split {{getInputStream}} 
> into {{connect}} and {{getInputStream}} to handle the connection and read 
> time out strategies correctly.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to