资源管理系统 Apache Mesos
Mesos 是诞生于 UC Berkeley 的一个研究项目,它的设计动机是解决编程模型和计算框架在多样化环境下,不同框架间的资源隔离和共享问题。尽管它的直接设计动机与 YARN 稍有不同,但它的架构和实现策略与 YARN 类似。当前部分公司在使用 Mesos 管理集群资源,比如国外的 Twitter、国内的豆瓣等。
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 启动任务的方法。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/df1c2668d6f157cf6ce83f789】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论