故障處理 怎樣搭建在故障時(shí)仍可用的Mesos frameworks在separate document中進(jìn)行討論。 如何使用Executor 使用Mesos Command Executor Mesos 提供了一個(gè)簡(jiǎn)單的executor,它可以執(zhí)行shell命令和代表framework scheduler的Docker container。足夠滿足各種各樣的框架的功能需求。 任何scheduler都可以使用 Mesos command executor 通過填寫可選的CommandInfo 。它TaskInfo protobuf 消息的成員。 message TaskInfo { ... optional CommandInfo command = 7; ... } 當(dāng)Tasks被指定這種方式時(shí),Mesos slave將填寫ExecutorInfo 的剩余信息。 創(chuàng)建自定義Framework Executor 如果你的framework有特殊要求, 您可能希望提供您自己的Executor執(zhí)行程序。 例如,你可能不希望tasks和processes之間是1:1的關(guān)系 . 你的framework executor 必須繼承于Executor類.必須重構(gòu) launchTask() 方法。你也可以在executor使用 $MESOS_HOME環(huán)境變量來確定Mesos 可執(zhí)行程序的位置。 Executor API 聲名于 MESOS_HOME/include/mesos/executor.hpp /* *當(dāng)executor驅(qū)動(dòng)程序已成功連接Mesos時(shí)調(diào)用。特別是,一個(gè)Scheduler可以通過 *FrameworkI*nfo.ExecutorInfo數(shù)據(jù)域傳遞一些到它的Executor。 virtual void registered(ExecutorDriver* driver, const ExecutorInfo& executorInfo, const FrameworkInfo& frameworkInfo, const SlaveInfo& slaveInfo); /* *當(dāng)executor和一個(gè)重新啟動(dòng)的slave重新注冊(cè)時(shí)調(diào)用. */ virtual void reregistered(ExecutorDriver* driver, const SlaveInfo& slaveInfo); /* * 當(dāng)executor和slave變?yōu)闊o連接時(shí)調(diào)用。 * (例如,slave因更新而重啟時(shí)。). */ virtual void disconnected(ExecutorDriver* driver); /* * 當(dāng)一個(gè)task 被發(fā)布到這個(gè)executor (通過Scheduler::launchTasks初始化的)時(shí)調(diào)用. 注意這個(gè)*task通過 一個(gè)線程、一個(gè)進(jìn)程或一些簡(jiǎn)單的計(jì)算, 然而,知道這個(gè)函數(shù)返回這個(gè)executor不會(huì)再 *調(diào)用其他的回調(diào)函數(shù)。 */ virtual void launchTask(ExecutorDriver* driver, const TaskInfo& task); /* * 當(dāng)一個(gè)運(yùn)行于這個(gè)executor的Task被終止(通過schedulerdriver::killtask)時(shí)調(diào)用。 *注意無狀態(tài)更新代表這個(gè)Executor被發(fā)送,這個(gè)Executor負(fù)責(zé)創(chuàng)建一個(gè)新的TaskStatus(注,帶 *TASK_KILLED標(biāo)志)并調(diào)用ExecutorDriver::sendStatusUpdate。 */ virtual void killTask(ExecutorDriver* driver, const TaskID& taskId); /* * 當(dāng) framework消息到達(dá)這個(gè)executor時(shí)調(diào)用。這些消息的傳輸方式是盡力機(jī)制,不要期待framework消息以可靠方式重新轉(zhuǎn)發(fā)。 */ virtual void frameworkMessage(ExecutorDriver* driver, const std::string& data); /* *當(dāng)這個(gè)executor 要終止其上所有運(yùn)行的tasks時(shí)被調(diào)用.注意在 Mesos 確定這個(gè) *executor終止了所有這個(gè)executor沒有發(fā)送中止?fàn)顟B(tài)更新 (帶TASK_KILLED, TASK_FINISHED, *TASK_FAILED, 等標(biāo)志)的tasks之后將產(chǎn)生TASK_LOST狀態(tài)更新. */ virtual void shutdown(ExecutorDriver* driver); /* *當(dāng)executor或executor驅(qū)動(dòng)發(fā)生一個(gè)致命錯(cuò)誤時(shí)調(diào)用。在調(diào)用這個(gè)返回函數(shù)前,這個(gè)驅(qū)動(dòng)將終止 。 */ virtual void error(ExecutorDriver* driver, const std::string& message); |
|