2017-06-05 43 views
1

我學習Mesos代碼,成爲有關執行一個簡單的泊塢窗圖像的內部工作流程非常混亂,如下這樣 :Apache Mesos的Command Executor的調度程序是什麼?

mesos-execute --master=XXX \ 
       --containerizer=docker \ 
       --name=test \ 
       --docker_image=XXX \ 
       --shell=false 

我相信/src/cli/execute.cpp是這個「mesos - 執行」的執行情況,在官方文件中稱爲「Command Executor」。

我看到execute.cpp內部設置了一個CommandScheduler,它有一個void received(queue<Event> events)函數來偵聽來自主設備的事件。如果它收到Event::OFFERS,它將開始執行提供的資源(代理)上的任務的過程。

但是,我無法準確找到提供給客戶端可執行文件的資源。 我看到/src/master/master.cpp中有void Master::offer(…)函數。但它會發送一個ResourceOffersMessage,而不是一個事件,也不會將事件轉換爲消息。 我發現只有/src/sched/sched.cpp可以接收和處理這種類型的消息。但我不明白sched.cpp如何用於其他代碼....

所以,我找不到發送提供的資源(從主)到Command Executor的確切工作流程。 這個Command Executor的調度程序是什麼? 有人能幫我理解嗎?

感謝

+0

[[email protected]郵件列表上回答](https://lists.apache.org/thread.html/[email protected]%3Cuser.mesos.apache.org%3E) – janisz

+0

和不同的重複問題[[email protected]郵件列表](https://lists.apache.org/thread.html/[email protected]%3Cdev.mesos.apache.org%3E) – janisz

回答

0

我相信/src/cli/execute.cpp是這個「mesos-執行」,這是官方文件中被稱爲「命令執行」的執行情況。

命令執行是一個通用的執行者,根據文檔有"enough functionality for a wide variety of framework requirements"。執行者負責啓動調度程序準備的TaskInfo消息中描述的任務。

事實上,Master會發送一個資源報價消息,但它會以正確的類型發送完整的事件evolve

CLI使用scheduler::Mesos,根據文檔是「將調度程序連接到Mesos主站的具體實現。摘要主站檢測(連接和斷開連接)。」received傳遞一個回調函數,並被這個庫調用。

+0

謝謝,evolve()函數是關鍵在於它將信息轉化爲正確的事件。這很混亂,Mesos有兩套通信系統,通過消息或事件。我的理解是,消息是某種遺產,他們正在轉向基於事件的方法,對吧? – MyCoy

+0

是的,Mesos引入了基於事件的HTTP API,並且需要演變舊消息。 [_我們需要將內部舊式消息/未版本化事件演變爲版本化事件,例如'v1 :: scheduler :: Event'或'v1 :: master :: Event'._](https://github.com/阿帕奇/ mesos /斑點/ 5dd1dd3b0d77ee6902af705a112f79b2b847644c/SRC /主/ master.hpp#L281) – janisz