Spark部署模式介绍

一、Local

Local 模式是最简单的一种运行方式,它采用单节点多线程方式运行,不用部署,开箱即用,适合日常测试开发。在 shell 中有如下几种参数配置:

  • local:只启动一个工作线程;
  • local[k]:启动 k 个工作线程;
  • local[*]:启动跟 cpu 数目相同的工作线程数。

二、Local-Cluster

Local-Cluster 为本地集群模式,类似于 hadoop 的伪分布式,其主要用于代码调试和测试,是源码学习常用的模式。不具备容错能力,不能用于生产环境。Driver、Master 与 Worker 运行在同一个 JVM 进程中。每个 Worker 可启动多个 Executor,每个 Executor 都是一个 JVM 进程。

三、Standalone

这是 spark 最常见的集群模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。Driver 在集群之外,可以是任意的客户端程序。Master 部署于单独的进程,一般在单独的机器上,可以有多个,但只能有一个处于**状态(借助 Zookeeper 可以搭建高可用的 spark 集群)。Worker 部署于单独的进程,一般在单独的机器上部署。

四、YARN

就是将 spark 的资源管理放在 yarn 上来完成,现在 spark on yarn 有两种模式:
1、yarn-cluster:适用于生产环境
2、yarn-client:适用于交互、调试、希望立即看到 app 的输出

两者的区别:
yarn-client模式:
1、Application Master 仅仅向 YARN 请求 executor,client 会和请求的 container通信来调度他们工作(运行在本地)
2、Client不能离开
3、能够看到日志
4、网络压力大

yarn-cluster模式:
1、driver 运行在 AM(Application Master) 中,它负责向 YARN 申请资源,并监督作业的运行状况。
2、当用户提交了作业之后,就可以关掉 Client,作业会继续在 YARN上 运行。然而 yarn-cluster 模式不适合运行交互类型的作业。
3)日志看不到
4)网络压力小

两种模式的架构图:

Spark部署模式介绍
Spark部署模式介绍

五、Mesos

Spark On Mesos,这种是将 spark 的资源调度放在 Mesos 分布式资源管理框架,目前在Spark On Mesos环境中,用户可选择两种调度模式之一运行自己的应用程序:

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

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