转自:http://www.hitdcos.com/read.php?tid=16&fpage=4
故障处理
怎样搭建在故障时仍可用的Mesos frameworks在separate document中进行讨论。
如何使用Executor
使用Mesos Command Executor
Mesos 提供了一个简单的executor,它可以执行shell命令和代表framework scheduler的Docker container。足够满足各种各样的框架的功能需求。
任何scheduler都可以使用 Mesos command executor 通过填写可选的CommandInfo 。它TaskInfo protobuf 消息的成员。
message TaskInfo {
...
optional CommandInfo command = 7;
...
}
当Tasks被指定这种方式时,Mesos slave将填写ExecutorInfo 的剩余信息。
创建自定义Framework Executor
如果你的framework有特殊要求, 您可能希望提供您自己的Executor执行程序。 例如,你可能不希望tasks和processes之间是1:1的关系 .
你的framework executor 必须继承于Executor类.必须重构 launchTask() 方法。你也可以在executor使用 $MESOS_HOME环境变量来确定Mesos 可执行程序的位置。
Executor API
声名于 MESOS_HOME/include/mesos/executor.hpp
/*
*当executor驱动程序已成功连接Mesos时调用。特别是,一个Scheduler可以通过
*FrameworkI*nfo.ExecutorInfo数据域传递一些到它的Executor。
virtual void registered(ExecutorDriver* driver,
const ExecutorInfo& executorInfo,
const FrameworkInfo& frameworkInfo,
const SlaveInfo& slaveInfo);
/*
*当executor和一个重新启动的slave重新注册时调用.
*/
virtual void reregistered(ExecutorDriver* driver, const SlaveInfo& slaveInfo);
/*
* 当executor和slave变为无连接时调用。
* (例如,slave因更新而重启时。).
*/
virtual void disconnected(ExecutorDriver* driver);
/*
* 当一个task 被发布到这个executor (通过Scheduler::launchTasks初始化的)时调用. 注意这个*task通过 一个线程、一个进程或一些简单的计算, 然而,知道这个函数返回这个executor不会再
*调用其他的回调函数。
*/
virtual void launchTask(ExecutorDriver* driver, const TaskInfo& task);
/*
* 当一个运行于这个executor的Task被终止(通过schedulerdriver::killtask)时调用。
*注意无状态更新代表这个Executor被发送,这个Executor负责创建一个新的TaskStatus(注,带 *TASK_KILLED标志)并调用ExecutorDriver::sendStatusUpdate。
*/
virtual void killTask(ExecutorDriver* driver, const TaskID& taskId);
/*
* 当 framework消息到达这个executor时调用。这些消息的传输方式是尽力机制,不要期待framework消息以可靠方式重新转发。
*/
virtual void frameworkMessage(ExecutorDriver* driver, const std::string& data);
/*
*当这个executor 要终止其上所有运行的tasks时被调用.注意在 Mesos 确定这个
*executor终止了所有这个executor没有发送中止状态更新 (带TASK_KILLED, TASK_FINISHED, *TASK_FAILED, 等标志)的tasks之后将产生TASK_LOST状态更新.
*/
virtual void shutdown(ExecutorDriver* driver);
/*
*当executor或executor驱动发生一个致命错误时调用。在调用这个返回函数前,这个驱动将终止 。
*/
virtual void error(ExecutorDriver* driver, const std::string& message);