转自:http://www.hitdcos.com/read.php?tid=15&fpage=4
Scheduler驱动API(Scheduler Driver API)
Scheduler Driver管理着scheduler的生命周期 (e.g., 开始、停止和等着完成) 并且和 Mesos Master通信 (e.g., 发布Tasks、杀死Tasks等).
注意这个接口通常不是由framework自身实现的,但它描述了可以与Mesos Master沟通的framework scheduler的可能的形式。
Please note that usage of this interface requires an instantiated MesosSchedulerDiver. Seesrc/examples/test_framework.cpp for an example of using the MesosSchedulerDriver.
请注意,这个接口的使用需要实例化mesos scheduler diver。看src/examples/test_framework.cpp正是使用mesos scheduler driver的例子。
声名于 MESOS_HOME/include/mesos/scheduler.hpp。
// 启动调度程序驱动程序。这需要在启动任何其他驱动程序之前调用。
virtual Status start();
//停止调度程序驱动程序。如果的话,
//这个Framework将永远不会重新连接到Mesos,Mesos所以将注销Framework并关闭这个Framework
// 所有的Tasks和Executors。如果''failover''标志设置为true,所有的Executors和Tasks将继续运行
//(对于一些Framework故障超时的情况)允许调度程序重新连接
//(通常是同一个进程,也有可能是不同的进程,例如,在不同的机器上的情况)。
virtual Status stop(bool failover = false);
/ /中止驱动,因此对Executors没有没有更多的回调。
/ /中止和停止的语义被有意区分,所以代码便可以检测到一个中止的驱动程序(即通过
/ / scheduler driver::join返回状态,见下文),如果需要的话(从同一个过程中)
//实例化并启动另一个驱动。
//注意stop()没有自动调用里面的“abort()”。
virtual Status abort();
// 等待驱动被停止或中止,很可能当前线程被永久的卡住了。
//函数的返回状态被用来判断驱动是否终止.
//(了解状态描述查看mesos.proto)。
virtual Status join();
//启动并立即连接(例如,块)的驱动程序。
virtual Status run();
//从Mesos请求资源(通过mesos.proto查看请求的描述和怎样处理,例如,从特定的Slaves 请求资源)。
//所有可用资源都是通过Scheduler::resourceOffers 异步地回调的。
virtual Status requestResources(const std::vector<Request>& requests);
//发布给定的任务集。任何剩余资源(即,不被Tasks或他们的Executors使用)将被拒绝。
//特定的过滤器应用于所有未使用的资源(见mesos.proto过滤器描述)。
//当提供多个offers时,可利用资源被汇总。请注意,所有offers都必须是同一个Slave。
//用空任务集作为参数调用这个函数讲拒绝offers的全部资源(见Scheduler::declineOffer)。
virtual Status launchTasks(
const std::vector<OfferID>& offerIds,
const std::vector<TaskInfo>& tasks,
const Filters& filters = Filters());
//杀死指定任务。注意,想要杀死一个目前不可靠的任务。
//例如,如果当一个试图杀死Tasks的Scheduler失败时,需要再次尝试。
//同样的,如果未注册/断开,请求将被丢弃(这些语义可能在将来改变)。
virtual Status killTask(const TaskID& taskId);
//接受给定的offers并对该offers的执行一系列操作。
//查看mesos.proto里的Offer.Operationmesos.proto了解合适的的操作。可用资源汇总
//当提供多个offers时,可利用资源被汇总。请注意,所有offers都必须是同一个Slave。
//任何未使用的资源将被拒绝
/ /指定的过滤器应用于所有未使用的资源(见过滤器说明mesos.proto)。
virtual Status acceptOffers(
const std::vector<OfferID>& offerIds,
const std::vector<Offer::Operation>& operations,
const Filters& filters = Filters());
// 作为整体拒绝offer的全部资源并且对资源应用一个特定的过滤器。
//注意,这可以在任何时候发生,并不一定发生在Scheduler::resourceOffers回调期间。
virtual Status declineOffer(
const OfferID& offerId,
const Filters& filters = Filters());
//删除框架先前设置的所有过滤器(通过launchtasks()设置的) 。
//这使得Framework可以接收来自那些被滤过器剔除的奴隶。
virtual Status reviveOffers();
//通知Mesos master停止向Framework发送offers。
//Scheduler应该调用reviveOffers()来恢复接受offers。
virtual Status suppressOffers();
//获取状态更新。这函数只在Scheduler永久的更新状态时被调用
//必须通过构造函数参数请求获取具体的更新状态,否则此方法的调用将导致驱动崩溃。
virtual Status acknowledgeStatusUpdate(const TaskStatus& status);
/ /Framework对它的一个Executor发送一个消息。这些消息的发送是不可靠的,
/ /不要期望一个Framework的信息以任何可靠的方式转发。
virtual Status sendFrameworkMessage(
const ExecutorsID& ExecutorsId,
const SlaveID& slaveId,
const std::string& data);
//允许该框架查询非终结Tasks的状态。
//这会使Master尽可能的返回每个在‘statuses’的Tasks的最新Tasks状态
//不在‘statuses’里的任务将会做TASK_LOST更新。
//如果‘statuses’是空的,Master将传回每个已知Tasks的最新状态。
virtual Status reconcileTasks(const std::vector<TaskStatus>& statuses);