Spark的几种部署模式及其特点
Spark的几种部署模式及其特点
[TOC]
**local(本地模式)**:
常用于本地开发测试,本地还分为local单线程和local-cluster多线程;
运行该模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程( 只有集群的Standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非你要用到HDFS)。
Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。将Spark应用以多线程的方式直接运行在本地,一般都是为了方便调试,本地单机模式分三类:
- local:只启动一个executor
- local[k]:启动k个executor
- local[*]:启动跟cpu数目相同的 executor处。
**standalone(集群模式)**:
分布式部署集群, **自带完整的服务,资源管理和任务监控是Spark自己监控**,这个模式也是其他模式的基础
典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持ZooKeeper来实现 HA
**on yarn(集群模式)**:
运行在 yarn 资源管理器框架之上,由 yarn 负责资源管理,Spark 负责任务调度和计算
分布式部署集群,资源和任务监控交给yarn管理,Spark客户端直接连接 Yarn,不需要额外构建 Spark 集群。有 Yarn-client 和 yarn-cluster 两种模式,但是目前仅支持粗粒度资源分配方式,主要区别在于:Driver程序的运行节点:
- cluster适合生产,driver运行在集群子节点,具有容错功能
- client适合调试,dirver运行在客户端
**on mesos(集群模式)**:
运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算
官方推荐这种模式(当然,原因之一是血缘关系)。正是由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。用户可选择两种调度模式之一运行自己的应用程序:
- 粗粒度模式(Coarse-grained Mode):每个应用程序的运行环境由一个Dirver和若干个Executor组成,其中,每个Executor占用若干资源,内部可运行多个Task(对应多少个“slot”)。应用程序的各个任务正式运行之前,需要将运行环境中的资源全部申请好,且运行过程中要一直占用这些资源,即使不用,最后程序运行结束后,回收这些资源。
- 细粒度模式(Fine-grained Mode):鉴于粗粒度模式会造成大量资源浪费,Spark On Mesos还提供了另外一种调度模式:细粒度模式,这种模式类似于现在的云计算,思想是按需分配。
**on cloud(集群模式)**:
比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3;Spark 支持多种分布式存储系统:HDFS 和 S3
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!