Mesos Framework开发指南 一


简介:描述了如何基于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;
 /* 
* 函数在SchedulerMaster变成"链接"时被调用。
* (举例来说, 当前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

猜你喜欢

转载自m635674608.iteye.com/blog/2329363
今日推荐