Mesos的Framework與Executor注冊過程
本文以Hadoop框架為例,介紹了framework與executor向mesos注冊過程。
1. Framework注冊過程
(1) JobTracker啟動時(shí),會調(diào)用MesosScheduler的start()方法
(2) MesosScheduler的start()方法創(chuàng)建一個MesosSchedulerDriver對象,并將自己作為參數(shù)傳入該對象。
(3) MesosSchedulerDriver初始化,創(chuàng)建一個SchedulerProcess對象
(4) MesosSchedulerDriver初始化,調(diào)用MasterDetector::create(),它將向SchedulerProcess對象發(fā)送一個NewMasterDetectedMessage消息
(5) SchedulerProcess對象收到NewMasterDetectedMessage消息后,向Master發(fā)送一個RegisterFrameworkMessage消息
(6) Master收到該消息后,保存相關(guān)信息,并返回FrameworkRegistedMessage消息,確認(rèn)framework注冊成功
2. Executor注冊過程
本節(jié)描述框架frameworkX在某個slaveX上注冊executor executorX的過程:
(1)Master***次向slaveX發(fā)送執(zhí)行frameworkX中task的消息 RunTaskMessage
(2)slave收到該消息后,運(yùn)行相應(yīng)的消息處理函數(shù)runTask()
(3)該函數(shù)發(fā)現(xiàn)該slave上未啟動frameworkX對應(yīng)的executorX,則調(diào)用IsolationModule的lauchExecutor()函數(shù)
(4)該函數(shù)創(chuàng)建一個FrameworkExecutor對象,并調(diào)用ExecutorProcess的Initialize()函數(shù)進(jìn)行初始化,同時(shí)啟動TaskTracker
(5)Initialize()函數(shù)創(chuàng)建消息RegisterExecutorMessage,并發(fā)送給slave
(6)Slave收到該消息后,調(diào)用對象的消息處理函數(shù)registerExecutor,該函數(shù)創(chuàng)建ExecutorRegisteredMessage消息,返回給ExecutorProcess
(7)ExecutorProcess收到該消息后,調(diào)用對應(yīng)的消息處理函數(shù)registered(),該函數(shù)再進(jìn)一步調(diào)用FrameworkExecutor的registered()函數(shù)
接下來,master發(fā)送給slave的RunTaskMessage消息依次經(jīng)過的流程如下圖所示。需要注意的是,對于同一個計(jì)算框 架,Mesos在一個slave上只會創(chuàng)建一個資源container,所有task全部在這個container里運(yùn)行,也就是說,mesos無法做到 task級別的隔離,只能做到executor級別的隔離,而對于同一個框架,同一個slave上所有task全部在一個executor中運(yùn)行。
對于Hadoop而言,每個mesos-slave上只會創(chuàng)建一個TaskTracker,且該TaskTracker會被放置到一個 executor(對應(yīng)一個linux container)中運(yùn)行,而同一個TaskTracker上所有task均在該TaskTracker所在進(jìn)程樹中,因而共享該executor對應(yīng) 的資源。當(dāng)TaskTracker接收到新的task時(shí),會增加該executor可以使用的資源量(使用“lxc-cgroup –n %s %s %lld”),而當(dāng)有task運(yùn)行完成時(shí),則減少該executor可使用的資源量(使用“lxc-cgroup –n %s %s %lld”)。
原文鏈接:http://dongxicheng.org/apache-mesos/apache-mesos-framework-executor-registering/