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

Reply via email to