有关mesos资源分配的一些疑问


在研究mesos之前,一直用的是YARN。
YARN中,各个框架的AM向RM申请资源,然后RM中的资源调度模块(CapacityScheduler/FairScheduler)根据调度策略去分配资源;AM从RM中拿到资源后,启动Container去执行任务。

而Mesos,根据我查阅论文和网络上的相关资料,各个计算框架并不向master去申请资源,而是mesos master主动将资源给各个框架(resource offer),然后框架根据需求决定是否接受分配的资源,如果接受了资源,再由自己的调度模块去将资源分配给各个任务。

那么问题是:如果framework不向mesos申请资源,mesos master根据什么去给各个框架分配资源呢?目前主要采用的资源分配策略是DRF,mesos master如何知道各个框架的主资源是什么?
已邀请:

徐磊 - BlackOps@Qunar

赞同来自: dominiczhou yingz zhangCheng


楼上讲的很详细,再补充点。

Mesos的资源是Master负责收集的,然后推给framework,每次推送的是集群的一个子集,假设你的集群有100台机器,每一次offer(间隔大约5s)可能推送给framework15台机器的resource,推送是串行的,Mesos自己会根据全部的framework自己做一次排序(目前貌似还不是权重排序的,user-group里有人讨论过这个排序),然后依次把这15台推送给框架A,框架B,框架C等等,所以framework在遍历自己的resource offer的时候,遇到不满足条件的要及时释放,不然后面的framework拿不到资源(这个很好测试,自己写个framework就能看到以上的行为)。

至于Mesos怎么知道framework要什么,这个是framework注册到Mesos时候指定的role决定的,role/resource是配对出现的,这样Mesos就知道这个framework要什么了!

dominiczhou - consultant@hpe

赞同来自: 徐磊 zhangCheng


针对于这个问题,当一个框架注册的时候,首先是master从scheduler driver收到框架的SUBSCRIBE call请求,然后检查frameworkinfo,之后由allocator模块来决定负责资源是不是分配给这个框架,默认的allocator是hierarchical,同时allocator模块是可插拔的。
具体可以根据框架执行日志以及源码瞅瞅。
另外,如果master没有收到框架收到的REVIVE call, master 也会给框架有频率的推送resources offer,由框架决定是否接收。
关于分配模块的介绍,可以参考:
http://mesos.apache.org/docume ... odule

dominiczhou - consultant@hpe

赞同来自:


加一下,默认的分层分配器使用的是DRFsorter ,具体参阅
https://svn.apache.org/repos/a ... r.hpp

通过自定义,实现了资源的公平共享。。。
还是要看源码

zhangCheng

赞同来自:


非常感谢@dominiczhou @徐磊

这两天查看了一下role和resource相关资料,能查到的不是很多。
目前,我理解的是:
每个框架在注册时,都会向master指定一个role和相应的resources,weight
例如:{"roles":[{"frameworks":["frame_id_1","frame_id_2"],"name":"*","resources":{"cpus":"3.0","disk":0,"mem":1024},"weight":1.0}]} (通过mesos-execute运行了两个测试framework)

如果集群中有多个role,则根据weight和resource进行对每个role需要的资源进行DRF分配。

但如果一个role里面运行了多个框架,如上面所示,这些框架又该如何分配资源呢?

而且框架注册时,如果需要指定role和resource,那么为什么资料里都说调度器不知道框架需要多少资源?

要回复问题请先登录注册