资源管理系统Apache Mesos

时间:2022-11-10 17:57:27

Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框架在多样化环境下,不同框架间的资源隔离和共享问题。尽管它的直接设计动机与YARN稍有不同,但它的架构和实现策略与YARN类似。当前部分公司在使用Mesos管理集群资源,比如国外的Twitter、国内的豆瓣等。

Apache Mesos由以下四个组件组成:

资源管理系统Apache Mesos

1、Mesos MasterMesos

Master是整个系统的核心,负责管理整个系统中的资源和接入的各种框架(Framework),并将Mesos Slave上的资源按照某种策略分配给框架。为了防止Mesos Master出现故障后导致集群不可用,Mesos允许用户配置多个Mesos Master,并通过ZooKeeper进行管理,当主Mesos Master出现故障后,ZooKeeper可马上从备用Master中选择一个提升为新的主Mesos Master。

2、Mesos SlaveMesos

Slave负责接收并执行来自Mesos Master的命令,并定时将任务执行状态汇报给Mesos Master。Mesos Slave将节点上的资源使用情况发送给Mesos Master,由Mesos Master中的Allocator模块决定将资源分配给哪个Framework,需要注意的是,当前Mesos仅考虑了CPU和内存两种资源。为了避免任务之间相互干扰,同YARN一样,Mesos Slave采用了轻量级资源隔离机制Cgroups。

3、Framework Scheduler

Framework是指外部的框架,如MPI、MapReduce、Spark等,这些框架可通过注册的方式接入Mesos,以便Mesos进行统一管理和资源分配。Mesos要求接入的框架必须有一个调度器模块Framework Scheduler,该调度器负责框架内部的任务调度。一个Framework在Mesos上工作流程为:首先通过自己的调度器向Mesos注册,并获取Mesos分配给自己的资源,然后再由自己的调度器将这些资源分配给框架中的任务。也就是说,同YARN一样,Mesos系统采用了双层调度框架:第一层,由Mesos将资源分配给框架;第二层,框架自己的调度器将资源分配给内部的各个任务。当前Mesos支持三种语言编写的调度器,分别是C++、Java和Python,为了向各种调度器提供统一的接入方式,Mesos内部采用C++实现了一个MesosSchedulerDriver(调度器驱动器), Framework的调度器可调用该Driver中的接口与Mesos Master交互,完成一系列功能(如注册、资源分配等)。

4、Framework Executor

Framework Executor主要用于启动框架内部的任务。由于不同的框架,启动任务的接口或者方式不同,当一个新的框架要接入Mesos时,通常需要指定专有的Executor,以告诉Mesos如何启动该框架中的任务。为了给各种框架提供统一的执行器编写方式,Mesos内部采用C++实现了一个MesosExecutorDiver(执行器驱动器), Framework可通过该驱动器的相关接口告诉Mesos启动任务的方法。