Docker全球Hack Day#3:按需YARN集群

编者注:这篇文章是Swapnil Daingade,Sarjeet Singh和Mitra Kaseebhotla共同努力的结果。

最近,我们很高兴参加了Docker Global Hack#3 。 我们很高兴地宣布,我们在“自由式”类别中获得了第一名,这意味着我们的解决方案必须使用最新Docker版本中的功能,包括Engine和其他Docker OSS项目。 在此博客文章中,我们将详细介绍在共享基础架构上提供具有相同安全性和性能的YARN群集的解决方案。

问题

企业不断努力提高数据中心投资的利用率和回报率。 这种需求导致企业探索将其基础架构整合到一个巨型集群中,而不是几个孤立的集群中。

企业目前有几个Hadoop / YARN集群,出于各种原因(安全性,性能等),它们需要分开。 是否可以在共享基础结构上提供具有相同安全性和性能的YARN群集?

最近一个名为Apache Myriad(正在孵化)的项目试图解决此问题。 它使用Apache Mesos作为基础资源调度程序。 当前,它支持在Mesos群集之上运行单个YARN群集。 企业可以在YARN与其他应用程序(例如Web服务器, Spark等)之间共享资源。作为Myriad的积极贡献者,我们正在探索在Myriad中提供多租户和租户隔离的选项。 我们尝试使用实验性网络插件来创建用于网络隔离的覆盖网络。 使用容器,计算隔离是免费的。 对于存储,我们研究了多种选择:1)为每个群集提供自己的存储(环回或连接到容器的原始设备,以及2)通过文件系统权限为单个DFS共享实例提供隔离。

实施细节

YARN由一个称为ResourceManager(RM)的中央守护程序组成。 在YARN上运行的应用程序可以以YARN容器(CPU块,mem块)的形式从RM请求资源。 群集中的每个节点都有一个守护程序,该守护程序管理该节点上的资源,称为NodeManager(NM)。

Mesos是轻量级的资源调度程序。 在Mesos上运行的应用程序称为框架。 与YARN不同,是Mesos向框架提供资源(CPU,mem)。 如果框架可以利用要约,则它接受要约并在要提供资源的节点上启动Mesos任务(进程)。 直到进程终止,Mesos任务才完成。

Myriad中 ,RM是使用诸如Marathon(开源)之类的元框架启动的。 马拉松接受Mesos的报价,并启动RM作为Mesos的任务。 Myriad在RM流程中运行的代码向Mesos注册为另一个框架。 我们称此代码为Myriad Scheduler。 请注意,由于RM现在已注册为Mesos框架,因此它可以在接受Mesos的报价后启动NM。

Myriad当前不支持RM和NM的Docker容器 。 它还不支持多租户或与其他非YARN应用程序(例如Web服务器)隔离。 以下是我们在黑客马拉松中尝试过的细节。 Mesos部署在物理群集上。 RM和NM位于容器中。 属于同一YARN群集的RM和NM可以相互通信。 属于不同YARN群集的群集无法相互通信。

网络配置和隔离

DockerGlobal-Blog-Img1

上图显示了我们如何在物理群集上配置网络。 出于演示目的,我们假设物理群集上运行着三个YARN群集。 我们为每个YARN群集创建一个覆盖物理群集所有节点的覆盖网络。 我们使用Docker的覆盖网络插件。 但是,覆盖网络的成员资格不允许容器与底层网络通信。 这对我们来说是个问题。 如果RM要在Docker容器中运行,则它必须具有向Mesos注册为Mesos框架的功能才能启动NM(Mesos基础结构在底层网络上运行)。

另外,我们希望支持一种配置,其中在多个YARN群集中只有一个分布式文件系统实例( HDFSMapR-FS等)。 使用此单个DFS实例的YARN群集由文件系统权限隔离。 因此,为了允许Docker容器访问DFS,我们在每个主机上为每个群集创建了一个网桥(就像在安装Docker之后出现的docker0网桥一样。)就像在docker0网桥上一样,配置了NAT,以便容器可以可以轻松访问底层网络,但不能访问属于另一个群集的容器。

此配置允许RM(也充当Mesos框架)向在底层网络上运行的Mesos注册。 图2(下图)显示了在三节点物理群集上看到时该网络配置的外观。 请参阅脚本OnDemandYARNClusters / scripts / docker-create-master.shOnDemandYARNClusters / scripts / docker-create-worker.sh以了解其配置方式。

当RM(充当Mesos框架)决定启动NM容器时,它接受Mesos的报价并要求Mesos运行OnDemandYARNClusters / scripts / docker_deploy.sh脚本(在每个物理服务器上都存在)。

该脚本采用三个参数:

  1. 正在启动的NM容器的Mesos任务ID
  2. 要连接的覆盖网络。 (请记住,所有物理主机上都可以使用所有覆盖网络)。
  3. 为NM运行的Docker映像。

该脚本配置存储和网络(将容器连接到正确的网桥,以便除了覆盖网络之外还可以与底层网络通信)。

我们还修改了Myriad代码,以便RM(充当Mesos框架)可以生成用于创建NM Docker容器的命令。 此处提供了针对无数(阶段1分支)的补丁: OnDemandYARNClusters / myriad-docker-hack-day-3.patch

您还可以按照以下步骤使用此补丁程序构建Myriad:

git clone https://github.com/sdaingade/myriad.git 
git checkout docker-hack-day 
./gradlew clean; ./gradlew build

最后,以下位置还提供了包括Hadoop在内的MapR发行版的Docker文件:

DockerGlobal-Blog-Img2

存储 :我们尝试使用暴露于Docker容器的环回设备来运行DFS(即,每个YARN群集一个DFS实例)。 将来,我们计划尝试在多个YARN群集之间共享DFS的单个实例,并通过使用文件系统权限来提供隔离。

现状:我们能够隔离执行所有部分(例如,网络,RM和NM创建,存储配置等)。 集成期间我们确实用完了时间,但是我们非常有信心,只要再多花一点时间,我们就能使这项工作端到端地进行。

在此博客文章中,您了解了我们在Docker Global Hack Day上提出的解决方案,该解决方案用于在共享基础架构上提供具有相同安全性和性能的YARN群集。

如果您对我们的解决方案有任何疑问,请在下面的评论部分中提问。

翻译自: https://www.javacodegeeks.com/2015/11/docker-global-hack-day-3-on-demand-yarn-clusters.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值