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

Arun Suresh edited comment on YARN-5972 at 12/6/16 10:49 PM:
-------------------------------------------------------------

[~subru], thanks for taking a look. w.r.t your 
([comment|https://issues.apache.org/jira/browse/YARN-5292?focusedCommentId=15685939])
 on YARN-5292, [~hrsharma], please feel free to chime in:
Based on my understanding of MAPREDUCE-4584, I feel that feature is actually 
quite orthogonal to this, and I don't think one approach is necessarily 
better/worse than the other. They can possibly be mixed and matched based on 
the use case.

While notifying an AM of containers that are about to be preempted does allow 
the AM to check-point work, it does imply, as you pointed out, that AMs be 
modified to act on this input and make some decisions based on it.

Container pausing/freezing on the other hand, given OS/VM level support (also 
exposed via Docker and LXC) to actually freeze a process (agreed, their 
definition of freeze might vary), is actually AM/application independent. This 
can be useful, for applications and deployments that do not really want to 
check-point on its own but at the same time like the idea of container 
preemption with work preservations.

Also, the NM container lifecycle and API changes in the Container Executor 
should not ideally take into account the execution type of the containers. The 
trigger can either be from the ContainerScheduler (in case of YARN-1011 and 
YARN-2877, when it decides resources are required for a guaranteed container) 
or from an AM (the AM wants to play nice and relinquish resources so that some 
opportunistic containers running on the node to run)

Even though this is currently targeted for opportunistic containers, I don't 
really see any problems exposing this to AMs via the 
ContainerManagementProtocol (though the devil is in the details)
bq. We cannot guarantee RESUME unless we block the allocation for the Container 
which IMHO defeats the purpose
Not sure I completely agree. If an AM pauses a guaranteed container, yes, the 
allocation is blocked, but this is no different from an AM starting a container 
running never-ending sleep job, except this has the advantage that the NM is 
aware of it and can use the relinquished resources to start any queued 
opportunistic containers. Since the container is guaranteed, resume is ensured, 
since any opportunistic container that was running due to graciousness of the 
AM would immediately be preempted. I do agree though, in the case of 
opportunistic containers, if an AM explicitly asks to pause it, it cannot 
expect the container to be resumed as soon as it asks.





was (Author: asuresh):
[~subru], thanks for taking a look. w.r.t your 
([comment|https://issues.apache.org/jira/browse/YARN-5292?focusedCommentId=15685939])
 on YARN-5292, [~hrsharma], please feel free to chime in:
Based on my understanding of MAPREDUCE-4584, I feel that feature is actually 
quite orthogonal to this, and I don't think one approach is necessarily 
better/worse than the other. They can possibly be mixed and matched based on 
the use case.

While notifying an AM of containers that are about to be preempted does allow 
the AM to check-point work, it does imply, as you pointed out, that AMs be 
modified to act on this input and make some decisions based on it.

Container pausing/freezing on the other hand, given OS/VM level support (also 
exposed via Docker and LXC) to actually freeze a process (agreed, their 
definition of freeze might vary), is actually AM/application independent. This 
can be useful, for applications and deployments that do not really want to 
check-point on its own but at the same time like the idea of container 
preemption with work preservations.

Also, the NM container lifecycle and API changes in the Container Executor 
should not ideally take into account the execution type of the containers. The 
trigger can either be from the ContainerScheduler (in case of YARN-1011 and 
YARN-2877, when it decides resources are required for a guaranteed container) 
or from an AM (the AM wants to play nice and relinquish resources so that some 
opportunistic containers running on the node to run)

Even though this is currently targeted for opportunistic containers, I don't 
really see any problems exposing this to AMs via the 
ContainerManagementProtocol (though the devil is in the details)
bq. We cannot guarantee RESUME unless we block the allocation for the Container 
which IMHO defeats the purpose
Not sure I completely agree. If an AM pauses a guaranteed container, yes, the 
allocation is blocked, but this is no different from an AM starting a container 
running never-ending sleep job, except this has the advantage that the NM is 
aware of it and can use the relinquished resources to start any queued 
opportunistic containers. Since the container is guaranteed, resume is ensured, 
since any opportunistic container that was running due to graciousness of the 
AM would immediately be preempted.




> Add Support for Pausing/Freezing of containers
> ----------------------------------------------
>
>                 Key: YARN-5972
>                 URL: https://issues.apache.org/jira/browse/YARN-5972
>             Project: Hadoop YARN
>          Issue Type: Bug
>            Reporter: Arun Suresh
>            Assignee: Hitesh Sharma
>
> YARN-2877 introduced OPPORTUNISTIC containers, and YARN-5216 proposes to add 
> capability to customize how OPPORTUNISTIC containers get preempted.
> In this JIRA we propose introducing a PAUSED container state.
> Instead of preempting a running container, the container can be moved to a 
> PAUSED state, where it remains until resources get freed up on the node then 
> the preempted container can resume to the running state.
> Note that process freezing this is already supported by 'cgroups freezer' 
> which is used internally by the docker pause functionality. Windows also has 
> OS level support of a similar nature.
> One scenario where this capability is useful is work preservation. How 
> preemption is done, and whether the container supports it, is implementation 
> specific.
> For instance, if the container is a virtual machine, then preempt call would 
> pause the VM and resume would restore it back to the running state.
> If the container executor / runtime doesn't support preemption, then preempt 
> would default to killing the container. 
>  



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: yarn-issues-h...@hadoop.apache.org

Reply via email to