Spark(一)Spark集群部署模式

目录

1.Standalone模式

2.Spark On Mesos模式

3.Spark On YARN模式

总结:


目前Apache Spark支持三种集群部署模式:分别是standalone、spark on mesos和spark on YARN。其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理;后两种是未来的主要发展趋势,部分容错性和资源管理交由统一的资源管理系统完成。这样带来的好处是,让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,共用一个资源管理系统,最大的好处是降低运维成本和提高资源利用率。本文将介绍这三种部署方式,并比较其优缺点。

 

1.Standalone模式

独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖其它任何资源管理系统。从一定程度上讲是其它两种模式的基础。借助Spark开发模式,我们可以得到一种开发新型计算框架的一般思路;先设计出它的standlone模式,为了快速开发,起初不需要考虑服务(比如master/save)的容错性,之后再开发相应的wrapper,将standalone模式下的服务原封不动的部署到资源管理系统yarn或者mesos上,由资源管理系统负责本身的容错。目前Spark 在standalone模式下是没有任何单点故障问题的,这是借助zookeeper实现的,思想类似于Hbase master单点故障解决方案。将Spark standalone与MapReduce比较,会发现他们两个在架构上是完全一致的。

Spark standalone与MapReduce相同点:

(1)都是由master/slave服务组成的,且起初master均存在单点故障,后来均通过zookeeper解决(Apache MRv1的JobTracker仍存在单点问题,但CDH版本得到了解决)。

(2)各个节点的资源被抽象成粗粒度的slot,有多少slot就能同时运行多少task。

Spark standalone与MapReduce不同点:

不同的是,MapReduce将slot分为map slot和reduce slot,它们分别只能供Map Task和Reduce Task使用,而不是共享,这是MapReduce资源利用率低的原因之一;

而Spark 则更优化一些,它不区分slot类型,只有一种slot,可以提供各种类型的Task 使用,这种方式可以提高资源利用率,但是不够灵活,不能为不同类型的Task定制slot资源。总之,这两种方式各有优缺点。

 

2.Spark On Mesos模式

这是很多公司采用的模式,也是官方推荐的模式。正是由于Spark 开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在Yarn上更加灵活,更加自然。目前在Spark On Mesos环境中,用户可以选择两种调度模式之一运行自己的应用程序(可参考Andrew Xia的“Mesos Scheduling Mode Spark”):

(1)粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Driver和若干个Executor组成,每个Executot占用若干资源,内部可运行多个Task(对应多个“slot”)。应用程序的各个任务真正运行之前,需要将运行环境的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。举个例子,比如你提交应用程序时,指定使用5个executors运行你的应用程序,每个executor使用5GB内存和5个CPU,每个executor内部设置5个slot,则Mesos需要先为executor设置资源并启动它们,之后开始调度任务。另外,在程序运行过程中,mesos的master和slave内部并不知道executor内部各个Task 的运行情况,executor直接将任务状态通过内部的通信机制汇报给Driver,从一定程度上可以认为,每个应用程序利用mesos搭建一个虚拟集群自己使用。

(2)细粒度模式(Fine-Grined Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。与粗粒度一样,应用程序启动时,会先启动executor,但每个executor所需的资源仅仅是自己运行所需的资源,不需要考虑将来要运行的任务,之后,mesos会为每个executor动态分配资源,每分配一些,便可以运行一个新任务,单个Task运行完成后可以马上释放对应的资源。单个Task会汇报状态给Mesos slave和Mesos Master,便于更加细粒度管理和容错。这种调度模式类似于MapReduce的调度模式,每个Task完全独立,优点是便于资源控制和隔离,但缺点也很明显,短作业延迟大。

 

3.Spark On YARN模式

这是一种很有前景的部署模式,但限于Yarn自身的发展,目前仅支持粗粒度模式(Coarse-grained Mode)。这是由于Yarn上的资源是不可以动态伸缩的,一旦Container启动以后,可使用的资源不再发生变化,不过这个已经在Yarn计划中了。

Spark-on-yarn的两种支持模式:

(1)yarn-cluster:适用于生产环境。

(2)yarn-client:适用于交互、调试,希望立即看到app的输出。

yarn-cluster和yarn-client的区别在于yarn AppMaster,每个yarn app实例有一个appmaster进程,是为app启动的第一个container;负责从Resourcemanager请求资源,获取到资源后,告诉NodeManager为其启动container。

yarn-cluster和yarn-client模式内部实现还是有很大区别的。如果你需要用于生产环境,那么请选择yarn-cluster;而如果你仅仅是Debug程序,可以选择yarn-client。

 

总结:

这三种部署方式各有利弊,通常需要根据实际情况决定采用哪种方案。进行方案选择时,需要考虑公司的技术路线(采用Hadoop生态系统还是其它生态系统)、相关技术人才储备等。上面涉及到的Spark的部署模式,选择哪一种模式,需要根据需求。如果只是测试Spark Application,你可以选择local模式。如果你数量不是很多,StandAlone是不错的选择。当你需要统一管理集群资源(Hadoop、Spark等),那么你可以选择Yarn和Mesos,但是这样维护成本就会变高。

a.从对比上看,mesos似乎是Spark更好的选择,也是被官方推荐的。

b.但是如果你同时运行Hadoop和Spark,从兼容性上考虑,Yarn是更好的选择。如果你不仅运行了Hadoop、Spark,还在资源管理器上运行了Docker,Mesos更加通用。

c.StandAlone对于小规模计算集群更加合适。

 

1.Spark部署三种常见模式?第一种模式的特点?后两者相对于前者的主要优势及带来的好处?

2.Spark standalone的特点?Spark standalone与MapReduce模式的相同点和不同点?

3.简介Spark On Mesos粗粒度模式和细粒度模式?简要说明细粒度模式的优缺点?

4.简介Spark-on-yarn的两种支持模式?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值