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