为什么用Yarn来做Docker容器调度引擎

前言

Mesos 其实我不是非常熟悉,所以有些内容可能会有失偏颇,带有个人喜好。大家也还是需要有自己的鉴别能力

Mesos和Yarn 都非常棒,都是可编程的框架。一个硬件,不能编程,就是死的,一旦可以编程就活了,就可以各种折腾,有各种奇思妙想可以实现,同样的,一个软件,只要是可编程的,基本也就活了,容易形成生态。

Yarn VS Mesos

我先说说在做容器调度引擎的时候,为什么选择Yarn而不是Mesos.

可部署性

先说明下,这里探讨的是Yarn或者Mesos集群的部署,不涉其上的应用。Yarn除了依赖JDK,对操作系统没有任何依赖,基本上放上去就能跑。Mesos因为是C/C++开发的,安装部署可能会有库依赖。 这点我不知道大家是否看的重,反正我是看的相当重的。软件就应该是下下来就可以Run。所以12年的时候我就自己开发了一套Java服务框架,开发完之后运行个main方法就行。让应用包含容器,而不是要把应用丢到tomcat这些容器,太复杂,不符合直觉。

二次开发  

Yarn 对Java/Scala工程师而言,只是个Jar包,类似索引开发包Lucene,你可以把它引入项目,做任何你想要的包装。 这是其一。

其二,Yarn提供了非常多的扩展接口,很多实现都是可插拔可替换的,在xml配置下,可以很方便的用你的实现替换掉原来的实现,没有太大的侵入性,所以就算是未来Yarn升级,也不会有太大问题。

相比较而言,Mesos更像是一个已经做好的产品,部署了可以直接用,但是对二次开发并不友好。

生态优势  

Yarn 诞生于Hadoop这个大数据的“始作俑者”项目,所以在大数据领域具有先天优势

  1. 底层天然就是分布式存储系统HDFS,稳定高效。
  2. 其上支撑了Spark,MR等大数据领域的扛顶之座,久经考验。
  3. 社区强大,最近发布版本也明显加快,对于长任务的支持也越来越优秀。

谈及长任务(long running services)的支持,其实大可不必担心,譬如现在基于其上的Spark Streaming 就是7x24小时运行的。一般而言,要支持长任务,需要考虑如下几个点:

  1. Fault tolerance. 主要是AM的容错
  2. Yarn Security. 如果开启了安全机制,令牌等的失效时间也是需要注意的
  3. 日志收集到集群
  4. 还有就是资源隔离和优先级

大家感兴趣可以先参考Jira https://issues.apache.org/jira/browse/YARN-896.我看这个Jira 13年就开始了。说明这事很早就被重视起来了。

Fault tolerance  

  • Yarn 自身高可用。目前Yarn的Master已经实现了HA.
  • AM容错,我看从2.4版本(看的源码,也可能更早的版本就已经支持)就已经支持 keep containers across attempt 的选项了。什么意思呢?就是如果AM挂掉了,在Yarn重新启动AM的过程中,所有由AM管理的容器都会被保持而不会被杀掉。除非Yarn多次尝试都没办法把AM再启动起来(默认两次)。 这说明从底层调度上来看,已经做的很好了。

日志收集到集群  

日志收集在2.6版本已经是边运行边收集了。

资源隔离  

资源隔离的话,Yarn做的不好,目前有效的是内存,对其他方面一直想做支持,但一直有限。这估计也是很多人最后选择Mesos的缘由。但是现在这点优势Mesos其实已经荡然无存,因为Docker容器在资源隔离上已经做的足够好。Yarn和Docker一整合,就互补了。

总结

Mesos 和 Yarn 都是非常优秀的调度框架,各有其优缺点,弹性调度,统一的资源管理是未来平台的一个趋势,类似的这种资源管理调度框架必定会大行其道。

一些常见的误解

脱胎于Hadoop,继承了他的光环和生态,然而这也会给其带来一定的困惑,首先就是光环一直被Hadoop给盖住了,而且由于固有的惯性,大家会理所当然的认为Yarn只是Hadoop里的一个组件,有人会想过把Yarn拿出来单独用么?

然而,就像我在之前的一篇课程里,反复强调,Hadoop是一个软件集合,包含分布式存储,资源管理调度,计算框架三个部分。他们之间没有必然的关系,是可以独立开来的。而Yarn 就是一个资源管理调度引擎,其一开始的设计目标就是为了通用,不仅仅是跑MR。现在基于Yarn之上的服务已经非常多,典型的比如Spark。

这里还有另外一个误区,MR目前基本算是离线批量的代名词,这回让人误以为Yarn也只是适合批量离线任务的调度。其实不然,我在上面已经给出了分析,Yarn 是完全可以保证长任务的稳定可靠的运行的。

时间: 2024-09-01 09:11:48

为什么用Yarn来做Docker容器调度引擎的相关文章

【干货】全自主研发Docker容器调度引擎——Newbon

背景:       大家所熟知的Docker容器调度引擎包括,K8S, Swarm, Mesos和Rancher,这些调度引擎都是开源的国外引擎,各有各的特点.在同客户和圈内人士沟通中,很多人直言国内容器创业公司大多只是将各种开源组件集成在一起,同质化严重,没有核心竞争力.作为国内第一批的容器创业公司--Ghostcloud精灵云,深知国内需要在容器的诸多领域拥有真正完全可控,同时具有核心竞争力的产品.因此,容器云平台最核心的调度引擎迫切需要一个完全可控,自主的产品,在这种背景下Newbon应运

自研容器调度引擎Newben会成为“中国的K8s”?

作者:精灵云 前言: 一个月以前,我们对外详细介绍了内置在精灵云EcOS(Enterprise Container Operation System,企业级容器云平台)中的全自研容器调度框架Newben ,文章刚发出,就有很多人向小GO询问Newben是否会开源的问题.在此,小GO引用精灵云创始人晏东对CSDN的专访回答作为给大家的统一答复:"Newben适用于所有以Docker作为虚拟化引擎的场景,目前主要面向中大型企业,不对外开放代码."也就是说,Newben目前暂不开源,而是内置

如何设置Docker容器中Java应用的内存限制

最近在和阿里的一些同事谈起使用Docker部署Java应用的场景,其中一个大家普遍关心的问题就是如何设置容器中JVM的内存限制. 如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数.比如,对于官方Tomcat 镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例 docker run --rm -e JAVA_OPTS='-Xmx512m' tomcat:8 在日志中,我们可以清楚地

Docker容器云在金融行业的应用

作者:精灵云 精灵云 CTO 乔融 Docker容器技术是改变世界的盒子,促进了云计算2.0的快速普及与发展.4月19日~20日,在工业和信息化部指导.中国信息通信研究院主办.云计算开源产业联盟承办的"2017全球云计算开源峰会"上,精灵云CTO乔融在本次峰会的金融行业使用开源论坛带来了以<Docker容器云在金融行业的应用>为主题的演讲,阐述了精灵云运用Docker容器技术在金融领域的实践与成果,并提出了基于"微服务+DevOps+容器云平台"的金融业

【重磅】完美融合Kubernetes,Ghostcloud企业级容器云平台EcOS率先实现双容器调度

前言 给大家报道一个最新重磅消息:最新版Ghostcloud企业级容器云平台EcOS(Enterprise Container Operation System)已完美支持容器市场最主流的调度引擎Kubernetes,并于今日正式上线啦!内置自研容器调度框架Newben和开源引擎Kubernetes,意味着EcOS平台率先实现了双容器调度引擎的融合.(新平台EcOS-Kubernetes现已开放试用申请,请至文末扫码申请.) EcOS平台是Ghostcloud推出的企业级容器云PaaS/CaaS

使用 docker+tmux 加强容器调度

使用 docker+tmux 加强容器调度 摘要 为了让自己做事更加自动化,把重复的工作尽可能降到最低,平时不但需要写很多固定操作的脚本来加快工作效率. 搞搞调度环境也是需要的. 本篇通过Docker+Tmux在RancherOS上做开发平台来实现最快速的Docker调度方便自己开发. 可以最快速度进入到调度容器中. 该容器有docker deamon 的所有控制权限. 可以在容器内的Tmux中跳转到其他容器中.方便调度开发. 经过2个版本的迭代终于搞定.到达1.0版本 Docker Regis

Docker Swarm:经济高效的容器调度

本文讲的是Docker Swarm:经济高效的容器调度[编者的话]本文探讨了几种容器调度策略,并以内存约束为例,讨论了如何利用Docker Swarm,通过资源约束实现容器的合理调度.其中,对容器资源的约束,包括硬约束和软约束,硬约束是指内存资源的实际限制条件,而软约束则是当服务器实际内存资源有足余时,容器可自由使用,一旦内存资源有所紧缺,则约束开始生效.硬约束和软约束的结合使用,可以在减少资源浪费的同时保证服务的稳定性. 我们每天在数百台服务器上运行成百上千个容器,面临的最大一个挑战是怎样高效

Riddler助力Docker容器为runC运行环境做准备

本文讲的是Riddler助力Docker容器为runC运行环境做准备[编者的话]本文主要是介绍Riddler工具,讲解Riddler为开发者带来的便利,并对基本使用进行了介绍和解释. 这是一个关于标准化带来的优势的故事,同时介绍如何利用Riddler转换一个Docker容器为runC镜像.Riddler由容器开发者Jess Frazelle研发. Phil Estes 是IBM开放云技术的高级技术经理,他将在本周多伦多的LinuxCon会议上介绍Riddler的性能. 运行,运行,运行! 回顾开

通过Docker容器运行持续集成/持续部署

本文讲的是通过Docker容器运行持续集成/持续部署,[编者的话] 对于Docker主流的应用场景:持续集成和持续部署(CI/CD)大家也许并不陌生.这篇文章从独特的视角阐述了如何利用各种云平台构建属于自己的CI/CD容器,笔者还自己扩展了Gitlab CI引擎,对CI感兴趣的同学对这个文章应该很感兴趣. 我曾经使用Docker了一段时间,在过去的一年里伴随着众多的Docker容器涌入,帮助用户们更容易的部署Docker容器到生产环境中.一些工具是第三方公司提供,当然也包括Docker公司自己的