You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "Wangda Tan (JIRA)" <ji...@apache.org> on 2014/06/06 09:41:02 UTC

[jira] [Commented] (YARN-1408) Preemption caused Invalid State Event: ACQUIRED at KILLED and caused a task timeout for 30mins

    [ https://issues.apache.org/jira/browse/YARN-1408?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14019646#comment-14019646 ] 

Wangda Tan commented on YARN-1408:
----------------------------------

After read code and thought about this problem, I think it's better to store ResourceRequests deducted when allocate a container:
* If container transferred to ACQUIRED state, stored ResourceRequests will be removed directly.
* If container killed/preempted before transferred to ACQUIRED state, we should recover stored ResourceRequests.

If we don't store ResourceRequests, it will be hard for us to re-create exactly same ResourceRequest from a container: container maybe allocated from a off-rack ResourceRequest, or ResourceRequest set some special fields like relaxLocality.

A possible place to store ResourceRequest is SchedulerApplicationAttempt which covers Fair/CapacityScheduler together, and expose a new method like "recoverResourceRequest" and we can pass a reference of SchedulerApplicationAttempt to RMContainer. Once a container state become ACQUIRED, RMContainer can call this method to recover ResourceRequests.

[~sunilg], [~jianhe], [~mayank_bansal], sounds like a doable plan?

> Preemption caused Invalid State Event: ACQUIRED at KILLED and caused a task timeout for 30mins
> ----------------------------------------------------------------------------------------------
>
>                 Key: YARN-1408
>                 URL: https://issues.apache.org/jira/browse/YARN-1408
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: resourcemanager
>    Affects Versions: 2.2.0
>            Reporter: Sunil G
>            Assignee: Sunil G
>         Attachments: Yarn-1408.1.patch, Yarn-1408.2.patch, Yarn-1408.3.patch, Yarn-1408.4.patch, Yarn-1408.patch
>
>
> Capacity preemption is enabled as follows.
>  *  yarn.resourcemanager.scheduler.monitor.enable= true ,
>  *  yarn.resourcemanager.scheduler.monitor.policies=org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy
> Queue = a,b
> Capacity of Queue A = 80%
> Capacity of Queue B = 20%
> Step 1: Assign a big jobA on queue a which uses full cluster capacity
> Step 2: Submitted a jobB to queue b  which would use less than 20% of cluster capacity
> JobA task which uses queue b capcity is been preempted and killed.
> This caused below problem:
> 1. New Container has got allocated for jobA in Queue A as per node update from an NM.
> 2. This container has been preempted immediately as per preemption.
> Here ACQUIRED at KILLED Invalid State exception came when the next AM heartbeat reached RM.
> ERROR org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.RMContainerImpl: Can't handle this event at current state
> org.apache.hadoop.yarn.state.InvalidStateTransitonException: Invalid event: ACQUIRED at KILLED
> This also caused the Task to go for a timeout for 30minutes as this Container was already killed by preemption.
> attempt_1380289782418_0003_m_000000_0 Timed out after 1800 secs



--
This message was sent by Atlassian JIRA
(v6.2#6252)