scheduler與executor向mesos註冊過程

本文以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註冊成功
這裏寫圖片描述

  1. 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/
作者:Dong,作者介紹:http://dongxicheng.org/about/
本博客的文章集合:http://dongxicheng.org/recommend/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章