Myriad 项目: Mesos 和 YARN 协同工作

  • Boris Lublinsky
  • 楚晗

2015 年 3 月 19 日

话题:DevOps语言 & 开发架构

Jim Scott 发表了新文章《两个集群的故事:Mesos 和 YARN》,它从当今许多 IT 采购中一个相当常见的情况开始讲述,即多资源孤岛:

第一个集群是 Apache Hadoop,它相当于一个岛,它的资源全部用于 Hadoop 平台和它的进程。第二个集群就是除了 Hadoop 之外其它所有资源所在的集群。

之所以产生这种情况是由于 Hadoop 是用Apache YARN来管理自己的资源,而尽管 YARN 在 Hadoop 集群中工作的不错,但对于非大数据的应用 YARN 就显得不那么适用了。

就像 Scott 在他文章中说得那样,这里的问题在于 YARN 所实现的调度方法:

当一个作业请求提交到 YARN 的资源管理器,YARN 会对可用的资源进行评估,并放置作业到相应的位置。这是一个作业应该去哪儿的决定……,YARN 针对 Hadoop 中的作业调度进行了优化,从历史或者典型场景的角度来说,这种优化都是针对长时间运行的批处理作业。这就意味着 YARN 并不是为长时间服务,或者短生命周期的交互式查询来设计的……,虽然有可能让 YARN 去调度其它这些工作负载,但显然这不是个理想的模型。

另一个不同的调度模型就是Apache Mesos,它:

……利用了两级调度机制,即资源的请求和提供是针对框架(framework)而不是作业,可以把框架视为在 Mesos 上面运行的应用。Mesos 的主节点决策提供给每个框架多少资源,每个框架接着决策它能接受的资源申请以及哪种应用可以在这些资源上运行。当集群中的节点共享多个框架时,这种资源分配方法可以获得近似最佳的数据本地化(data locality)。

现实情况中,Mesos 和 YARN 在 IT 基础设施中都占有重要的位置。但是像 Scott 所讲述的,当你把它们两个背靠背使用时就会导致资源分裂。

在相同的数据中心同时使用 Mesos 和 YARN 两个资源管理器会带来益处,但目前需要你创建两个不同的静态分区。这也意味着某些资源会专属于 Hadoop,需要用 YARN 来管理,而其余的则是用 Mesos。

如同 Scott 所说,eBay、MapR 和 Mesosphere 合作了一个新项目,被称作Myriad,它可以让 YARN 和 Mesos 和谐的工作,而这会给企业和数据中心带来好处。

这个开源项目是 Mesos 框架和 YARN 调度器的结合,它使得 Mesos 可以管理 YARN 的资源请求。当 YARN 中有作业请求资源时,YARN 的资源管理器会先通过 Myriad 的调度器来调度,这样就可以和 Mesos 的资源申请和提供匹配起来。Mesos Master 接下来会把调度请求发给 Mesos 的工作节点(Mesos Slave)。Mesos 的工作节点会和 Myriad 的执行器(executor)进行通信并发送请求, Myriad 执行器的作用是运行 YARN 的节点管理器(Node Manager)。当 Myriad 在 Mesos 分配的资源上加载 YARN 节点管理器后,YARN 节点管理器就会和 YARN 的资源管理器通信来确定作业可用的资源。YARN 可以以自己认为适合的方法来使用资源,Myriad 则在 Mesos 可用的资源池和 YARN 的有资源需求的任务间提供了无缝的桥梁。

Myriad 使得在使用 Mesos 时,资源利用和跨数据中心的资源管理得以统一。在这种情况下,YARN 的工作负载是运行在共享的集群上,相比独立的 YARN 集群来说,更加动态和弹性。这个方法也使得数据中心维护团队可以扩展其资源以供给 YARN(或者,从 YARN 拿走)而无须去重新配置集群。

查看英文原文:Project Myriad: Mesos and YARN Working Together

DevOps语言 & 开发架构