Hi Jongyoul, Strictly speaking, Mesos containerizer creates a container, and launches the executor inside of that container which launches the task.
The code path you're looking at is in the slave side (slave.cpp), which calls containerizer->launch when executor is not found. Either way your observation is correct, that launchExecutor in the slave is only called when a executor is not found in the framework object internally in the slave object. Tim On Fri, Jan 2, 2015 at 12:00 AM, Jongyoul Lee <[email protected]> wrote: > Thanks, Nishant and Tim, > > I'm using mesos_containerizer for running spark tasks. In case of > mesos_containerizer - or anyone else -, Could you please tell me when > executor creates a new container or give me more hint to find that? I've > found code that framework->launchExecutor is called when > framework->getExecutor returns null. > > JL > > On Fri, Jan 2, 2015 at 4:17 AM, Timothy Chen <[email protected]> wrote: > >> Hi Jongyoul, >> >> It depends on what you refer to as a "container". >> >> In Mesos actually there are several concepts in play, >> tasks that is either a custom executor or a command, executors that >> are responsible for launching tasks, and containerizers that are >> responsible for creating the containers to launch executors and/or >> tasks. >> >> So if you are referring to an actual container that in mesos is either >> cgroups or docker, then depending on the implementation of the >> particular containerizer (Mesos or Docker or External, etc), a >> container can have multiple tasks or executors although currently all >> of them launches one container per executor. Executor itself can >> potentially launch multiple tasks that are running simultaneously as >> long as the executor is registered and referred to the same id by >> multiple tasks. >> >> In the slave object itself, it only tracks frameworks and executors, >> and when it doens't find it registered in memory it will ask the >> containerizer to launch it. >> >> Tim >> >> >> >> >> On Thu, Jan 1, 2015 at 11:01 AM, Nishant Suneja <[email protected]> >> wrote: >> > Hi Jongyoul >> > >> > Take a look at the slave/state.hpp file, and go through the hierarchy of >> > the state information starting from slave to task. >> > You will see that an executor state has a map of run states, which is >> > indexed by containerId. >> > It also has "latest" field to denote the current containerId which its >> > using. >> > >> > So, to answer your question, at any point of time, an executor should >> have >> > just one active container (which means one process on the system), >> > and that process's working directory would be identified by the "latest" >> > containerId field in the ExecutorState. >> > But, it can have multiple directories from the previous runs, each >> > identified by a unique containerId. >> > These directories would eventually be garbage collected. >> > >> > Nishant >> > >> > >> > >> > >> > >> > On Tue, Dec 30, 2014 at 6:12 PM, Jongyoul Lee <[email protected]> >> wrote: >> > >> >> Hi, dev >> >> >> >> I'm curious about the relationship between executor and container. Can >> any >> >> executor have multiple container? or have just one? In codes of >> slave.cpp, >> >> launchExecutor only can create container and is called only when the >> return >> >> value of getExecutor is null. Thus I think each executor can have one >> >> container only. Is it correct? If I'm wrong, please tell me correct >> >> procedure. >> >> >> >> Thanks in advance, >> >> JL >> >> >> >> -- >> >> 이종열, Jongyoul Lee, 李宗烈 >> >> http://madeng.net >> >> >> > > > > -- > 이종열, Jongyoul Lee, 李宗烈 > http://madeng.net
