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 "Zhaohui Xin (JIRA)" <ji...@apache.org> on 2018/12/01 03:05:00 UTC
[jira] [Comment Edited] (YARN-9074) Docker container rm command
should be executed after stop
[ https://issues.apache.org/jira/browse/YARN-9074?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16705593#comment-16705593 ]
Zhaohui Xin edited comment on YARN-9074 at 12/1/18 3:04 AM:
------------------------------------------------------------
[~shanekumpf@gmail.com], [~ebadger]. Thanks for your explanation. If we still want to keep container in docker after they exited, we can add a parameter docker-rm-delay to meet our needs. The brief process is as follows when clean up a container ,
{code:java}
send ContainerExecutor.Signal.TERM;
sleep sleepDelayBeforeSigKill; send ContainerExecutor.Signal.KILL;
sleep sleepDelayBeforeDockerRM; send ContainerExecutor.Docker.RM;
{code}
Also this parameter can be configured on the client side, letting the user decide whether to keep their container when the task ends. I think it is not good to keep all the containers on the NM when debug, which will make a large number of containers remaining for a period of time.
was (Author: uranus):
[~shanekumpf@gmail.com], [~ebadger]. Thanks for your explanation. If we still want to keep container in docker after they exited, we can add a parameter docker-rm-delay to meet our needs. The brief process is as follows when clean up a container ,
{code:java}
send ContainerExecutor.Signal.TERM;
sleep sleepDelayBeforeSigKill; send ContainerExecutor.Signal.KILL;
sleep sleepDelayBeforeDockerRM; send ContainerExecutor.Docker.RM;
{code}
Also this parameter can be configured on the client side, letting the user decide whether to keep their container when the task ends. I think it is not good to keep all the containers on the NM when debug, which will make a large number of containers remain for a period of time.
> Docker container rm command should be executed after stop
> ---------------------------------------------------------
>
> Key: YARN-9074
> URL: https://issues.apache.org/jira/browse/YARN-9074
> Project: Hadoop YARN
> Issue Type: Sub-task
> Reporter: Zhaohui Xin
> Assignee: Zhaohui Xin
> Priority: Major
>
> {code:java}
> @Override
> public void transition(ContainerImpl container, ContainerEvent event) {
> container.setIsReInitializing(false);
> // Set exit code to 0 on success
> container.exitCode = 0;
> // TODO: Add containerWorkDir to the deletion service.
> if (DockerLinuxContainerRuntime.isDockerContainerRequested(
> container.daemonConf,
> container.getLaunchContext().getEnvironment())) {
> removeDockerContainer(container);
> }
> if (clCleanupRequired) {
> container.dispatcher.getEventHandler().handle(
> new ContainersLauncherEvent(container,
> ContainersLauncherEventType.CLEANUP_CONTAINER));
> }
> container.cleanup();
> }{code}
> Now, when container is finished, NM firstly execute "_docker rm xxx"_ to remove it and this thread is placed in deletionService. see more in YARN-5366 .
> Next, NM will execute "_docker stop_" and "docker kill" command. these tow commands are wrapped up in ContainerCleanup thread and executed by ContainersLauncher. see more in YARN-7644.
> The above will cause the container's cleanup to be split into two threads. I think we should refactor these code to make all docker container killing process be place in ContainerCleanup thread and "_docker rm_" should be executed last.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-issues-help@hadoop.apache.org