mesos学习笔记2 Scheduler开发

参考

Scheduler Http Api:http://mesos.apache.org/documentation/latest/scheduler-http-api/ 
Java Api:http://mesos.apache.org/api/latest/java/

任务下发流程

  1. agent向master汇报心跳
  2. master基于offerResource接口,将资源offer给scheduler
  3. scheduler基于自己的任务状态,决定是acceptOffer或者declineOffer,如果当前有合适任务,那么acceptOffer,将任务下发给master
  4. master将任务下发给agent
  5. agent执行完成后,通过statusUpdate将任务状态汇报给master
  6. master将任务执行状态返回给taskScheduler
  7. taskScheduler完成任务

TaskScheduler开发

当前scheduler开发主要有三个类:

  • Scheduler:

    • 框架的回调接口类,开发者必须实现该类
    • 当状态发生变更时,master会回调该类的接口,状态包括:scheduler注册,resourceOffer,任务状态变更,slave或者executor异常等
    • master回调时,一个时间点只会进行一次回调,因此在实现该类接口时,需要快速进行处理,不要长时间hang住。
  • SchedulerDriver:

    • 负责主动发起跟master的交互
    • 负责scheduler生命周期管理:注册,启动,停止等
    • 负责task的生命周期管理:创建,删除,停止等
    • Scheduler状态回调的响应,比如响应offerResource,响应statusUpdate等
  • MesosSchedulerDriver:

    • Mesos默认的SchedulerDriver实现

资源Offer

offer_timeout 设置

master默认资源分配策略是消极的,体现在以下几个方面:

 1. 当agent汇报资源时,master默认只会先把offer发给一个scheduler,当这个scheduler做出响应(accept或者decline)后,再发给下一个
 2. master默认offer_timeout设置是永不超时
 3. 只有当scheduler异常退出或者自己显式向master取消注册,master才会回收scheduler对应的offers

基于以上三点,如果当master在处理offer时hang住,或者没有处理该offer信息(比如直接丢弃),那么该offer上的资源将永远无法使用

解决方案:

  1. master设置offer_timeout,该参数表示,如果scheduler在timeout时间内没有回应offer,那么master就认为offer已经过期,会重新再发起offer
  2. scheduler在处理offerResource时,如果资源不需要,需要显示使用declineOffer将资源拒绝

Filter过滤器

scheduler在declineOffer时,可以使用filter进行过滤,filter里面有变量refuse_seconds,可以设置对于该offer的refuse时间

资源属性

由于当前Slave在汇报的时候,只是汇报资源信息(CPU/MEM),在某些情况下,我们希望把任务下发到特定类型的Agent上执行,比如CPU主频较高的Agent,OS为Centos7的Agent,OS为windows的Agent等等,现有机制是无法实现的,因为agent并没有汇报这些信息,怎么办呢?

解决方案:

  1. Agent在向master注册时,可以在slaveInfo里面填充自定义属性Attribute,比如OS信息,CPU主频信息等等
  2. master再像scheduler提供resourceOffer时,会把master的Attribute属性带到offer中
  3. scheduler在offerResource响应时,可以检查offer的Attribute属性(即master的Attribute属性),再进行判断

 

 

 

 

posted @ 2016-08-19 10:07  SailorXiao  阅读(1135)  评论(0编辑  收藏  举报