本文以Hadoop框架为例,介绍Framework和Executor注册到mesos的流程。1.框架注册流程(1)JobTracker启动时,会调用MesosScheduler的start()方法(2)MesosScheduler的start()方法创建了一个MesosSchedulerDriver对象,并将自己作为参数传入该对象。(3)MesosSchedulerDriver初始化,创建一个SchedulerProcess对象(4)MesosSchedulerDriver初始化,调用MasterDetector::create(),它会向SchedulerProcess对象发送NewMasterDetectedMessage消息(5)SchedulerProcess对象收到NewMasterDetectedMessage消息后,发送RegisterFrameworkMessagemessagetoMaster(6)Master收到消息后保存相关信息并返回FrameworkRegistedMessage消息确认框架注册成功。2.Executor注册流程本节描述框架frameworkX在slaveX上注册executorexecutorX的流程:(1)Master***向slaveX发送消息,执行frameworkX中的任务RunTaskMessage(2)slave收到消息后,运行相应的消息处理函数runTask()(3)函数发现frameworkX对应的executorX在slave上还没有启动,则调用IsolationModule的lauchExecutor()函数(4)该函数创建一个FrameworkExecutor对象,并调用ExecutorProcess的Initialize()函数进行初始化,同时启动TaskTracker(5)Initialize()函数创建消息RegisterExecutorMessage,并发送给slave(6)Slave收到消息后,调用对象的消息处理函数registerExecutor,创建一个ExecutorRegisteredMessage消息返回给ExecutorProcess(7)ExecutorProcess收到消息后calls对应的消息处理函数registered(),进一步调用FrameworkExecutor的registered()函数接下来master向slave发送RunTaskMessage消息的流程如下图所示。需要注意的是,对于同一个计算框架,Mesos只会在一个slave上创建一个资源容器,所有的任务都会运行在这个容器中。也就是说,Mesos无法实现任务级隔离,只能实现执行器级隔离,而且对于同一个框架,同一个slave上的所有任务都运行在一个执行器中。对于Hadoop,每个mesos-slave上只会创建一个TaskTracker,TaskTracker会放在一个executor(对应一个linux容器)中运行,同一个TaskTracker上的所有任务都在TaskTracker所在的进程树中located,从而共享executor对应的资源。当TaskTracker收到一个新任务时,它会增加执行者可以使用的资源量(使用“lxc-cgroup-n%s%s%lld”),当一个任务完成时,它会减少资源量执行者可以使用资源量(使用“lxc-cgroup–n%s%s%lld”)。原文链接:http://dongxicheng.org/apache-mesos/apache-mesos-framework-executor-registering/