Mesos Framework开发指南 一
2019獨角獸企業重金招聘Python工程師標準>>>
Mesos Framework開發指南 一 博客分類: 架構 mesos Framework Development Guide
簡介:描述了如何基于Mesos構建應用.
Framework開發指南
在本文檔中,我們把Mesos程序集稱為Framework。?
你可以在源代碼目錄MESOS_HOME/src/examples/看到FrameworkScheduler的例子。通過例子來理解MesosFrameworkScheduler并選擇你喜歡語言進行執行。RENDLER提供了以C++,Go,Haskell,Java,Python和Scala語言所實現的Framework例子供你選擇。?
創建框架Scheduler(Framework Scheduler)
你可以用C、C++、Java/Scala或者Python語言編寫一個框架Scheduler,它需要繼承Scheduler類(見下面Scheduler API)。Scheduler應當創建一個SchedulerDriver(負責Scheduler和Mesos master的通信),然后調用SchedulerDriver.run()函數。
SchedulerAPI(Scheduler API)
用framework schedulers程序實現的回調接口。
聲明如下代碼位于:MESOS_HOME/include/mesos/scheduler.hpp?。
/*?
* 空的虛擬的析構函數 (需要把析構函數實例化成子類).
*/?
virtual?~Scheduler() {}
?/*?
* 函數在當Scheduler成功在MesosMaster中注冊時被調用。
* FrameworkID是在Framework中由Master生成一個唯一的ID,用于區別其他Scheduler。
* MasterInfo以參數的形式提供當前的Master?IP地址和端口。
*/
?virtual?void?registered(SchedulerDriver* driver,
???????????????????????const?FrameworkID& frameworkId,?
????????????????????????const?MasterInfo& masterInfo) =?0;
?/*?
* 函數在Scheduler再次在新當選的Master注冊時被調用。
*只有當Scheduler以前被注冊過時調用。
* MasterInfo以參數的形式表示新當選的Master的更新信息。
*/?
virtual?void?reregistered(SchedulerDriver* driver,?
????????????????????????const?MasterInfo& masterInfo) =?0;
?/*?
* 函數在Scheduler與Master變成"無鏈接"時被調用。
* (舉例來說, 當前Master關閉并由其他的Master接管)。
*/?
virtual?void?disconnected(SchedulerDriver* driver) =?0;?
/*
* 函數在資源已經被提供給這個Framework時被調用。最簡單的offer僅包含一個簡單slave的資源。?
* 這些資源以一個offer的形式打包提供給當前Framework對象,除非發生異常情況,則不在提交。
* 第一種當前或者某個Framework拒絕了這些資源,才能夠再次提交offer。
* (請查看 SchedulerDriver::launchTasks) 或者第二種情況取消了這些資源。
* (請查看 Scheduler::offerRescinded)。
* 注意:資源可能在同一時間提交給一個或者多個Framework(根據分配器的分配情況)。 * 如果上面的事情發生, 首先拿到offer的Framework將會使用這些資源來啟動Tasks,導致其他Tasks獲取?
* offer的Framework取消這些資源的使用(或者某個Framework已經使用這些資源啟動了Tasks,
* 這些Tasks將會伴隨著TASK_LOST狀態而失敗,并發送過多的消息通知)。?
*/?
virtual?void?resourceOffers(SchedulerDriver* driver,
???????????????????????????const?std::vector<Offer>& offers) =?0;?
/*
* 函數在某個offer不在有效時被調用。(舉例來說, 節點不可用或者資源被其他Framework的offer占用)。?
* 如下發生以下情況offer均不會撤銷 (舉例來說, 丟棄信息,Framework運行失敗,等等。),
* 當Framework嘗試啟動那些沒有有效offer的Tasks時,Framework會收到那些Tasks發送TASK_LOST的狀態更新?
* (請查看Scheduler::resourceOffers).?
*/?virtual?void?offerRescinded(SchedulerDriver* driver,?
????????????????????????????const?OfferID& offerId) =?0;?
/*
* 函數在一個Tasks的狀態發生變化時被調用。(舉例來說, 一個節點(slave)丟失并且Tasks丟失,?
* 一個Tasks完成并且Executors發送了一個狀態更新回話,等等)。 如果使用隱式定義implicit?
* acknowledgements, 以 _acknowledges_ 的收據作為這個狀態的更新作為回調函數返回!?
* 如果發生Scheduler無論何種原因在回調函數的時候終止(或者進程退出)另一個狀態更新將會被提交?
* (注意,無論如何,如果slave發送狀態更新是丟失或者失敗。在那段時間是不正確的)。
* 如果使用的是顯示explicit acknowledgments,Scheduler必須在驅動中知道這個狀態。
*/?
virtual?void?statusUpdate(SchedulerDriver* driver,
?????????????????????????const?TaskStatus& status) =?0;?
/*?
* 函數在當Executors發送消息時被調用。?
* 這些消息是盡力服務:在任何可靠的方式下,絕不期望Framework消息會被重新提交。 */?
virtual?void?frameworkMessage(SchedulerDriver* driver,
???????????????????????????????const?ExecutorsID&?ExecutorsId,
???????????????????????????????const?SlaveID& slaveId,?
????????????????????????????????const?std::string& data) =?0;?
/*
* 函數在當某個slave確定不能找到時被調用。(舉例來說,設備故障,網絡隔離)。
* 絕大部分Framework會以在新的slave上重新啟動所有Tasks的方式進行調度。
*/?
virtual?void?slaveLost(SchedulerDriver* driver,?
?????????????????????const?SlaveID& slaveId) =?0;?
/*?
* 函數在Executors退出或者中斷時被調用。注意:任何Tasks的運行將會自動生成TASK_LOST的狀態更新。
*/?
virtual?void?ExecutorsLost(SchedulerDriver* driver,?
????????????????????????const?ExecutorsID&?ExecutorsId,?const?SlaveID& slaveId,?
?????????????????????????int?status) =?0;?
/*?
* 函數在一個未被Scheduler或者Scheduler驅動不能捕獲的錯誤發生時被調用。
*?Scheduler驅動將會在這個回調函數執行之前執行。
*/
?virtual?void?error(SchedulerDriver* driver,?
????????????????????const?std::string& message) =?0;
?
http://blog.csdn.net/a515983690/article/details/51446043
轉載于:https://my.oschina.net/xiaominmin/blog/1598943
總結
以上是生活随笔為你收集整理的Mesos Framework开发指南 一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS6.5升级到CentOS7
- 下一篇: 30-seconds-code——mat