Framework开发指南 三

时间:2021-05-25 15:16:10

转自:http://www.hitdcos.com/read.php?tid=16&fpage=4


故障处理
怎样搭建在故障时仍可用的Mesos frameworksseparate document中进行讨论。

如何使用Executor



 使用Mesos Command Executor


Mesos 提供了一个简单的executor它可以执行shell命令和代表framework schedulerDocker container。足够满足各种各样的框架的功能需求。
任何scheduler都可以使用 Mesos command executor 通过填写可选的CommandInfo TaskInfo protobuf 消息的成员
message TaskInfo {
  ...
  optional CommandInfo command = 7;
  ...
}
 
当Tasks被指定这种方式时,Mesos slave将填写ExecutorInfo 的剩余信息。

创建自定义Framework Executor



如果你的framework有特殊要求, 您可能希望提供您自己的Executor执行程序 例如,你可能不希望tasksprocesses之间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);
/*
executorslave变为无连接时调用。
* (例如,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);