一、简述

Spark 有多种运行模式:

1.可以运行在一台机器上,称为 Local(本地)运行模式。
2.可以使用 Spark 自带的资源调度系统,称为 Standalone 模式。
3.可以使用 Yarn、Mesos、Kubernetes 作为底层资源调度系统,称为 Spark On Yarn、Spark On Mesos、Spark On K8S。

二、Client 和 Cluster 提交模式

Driver 是 Spark 中的主控进程,负责执行应用程序的 main() 方法,创建 SparkContext 对象,负责与 Spark 集群进行交互,提交 Spark 作业,并将作业转化为 Task(一个作业由多个 Task 任务组成),然后在各个 Executor 进程间对 Task 进行调度和监控。

根据应用程序提交方式的不同,Driver 在集群中的位置也有所不同,应用程序提交方式主要有两种:Client 和 Cluster,默认是 Client,可以在向 Spark 集群提交应用程序时使用 --deploy-mode 参数指定提交方式。

1.client模式

1)client mode下Driver进程运行在Master节点上,不在Worker节点上,所以相对于参与实际计算的Worker集群而言,Driver就相当于是一个第三方的“client”。

2)正由于Driver进程不在Worker节点上,所以其是独立的,不会消耗Worker集群的资源。

3)client mode下Master和Worker节点必须处于同一片局域网内,因为Drive要和Executorr通信,例如Drive需要将Jar包通过Netty HTTP分发到Executor,Driver要给Executor分配任务等。

4)client mode下没有监督重启机制,Driver进程如果挂了,需要额外的程序重启。

2.cluster模式

1)Driver程序在worker集群中某个节点,而非Master节点,但是这个节点由Master指定。

2)Driver程序占据Worker的资源。

3)cluster mode下Master可以使用–supervise对Driver进行监控,如果Driver挂了可以自动重启。

4)cluster mode下Master节点和Worker节点一般不在同一局域网,因此就无法将Jar包分发到各个Worker,所以cluster mode要求必须提前把Jar包放到各个Worker几点对应的目录下面。

3.那么是选择client mode还是cluster mode呢?

一般来说,如果提交任务的节点(即Master)和Worker集群在同一个网络内,此时client mode比较合适。

如果提交任务的节点和Worker集群相隔比较远,就会采用cluster mode来最小化Driver和Executor之间的网络延迟。

4.Spark运行模式配置

根据Driver运行在哪分为:
Client模式和Cluster模式

用户在提交任务给 Spark 处理时,以下两个参数共同决定了 Spark 的运行方式。
· –master MASTER_URL :决定了 Spark 任务提交给哪种集群处理。
· –deploy-mode DEPLOY_MODE:决定了 Driver 的运行方式,可选值为 Client或者 Cluster。

Master URL Meaning
local 在本地运行,只有一个工作进程,无并行计算能力。
local[K] 在本地运行,有 K 个工作进程,通常设置 K 为机器的CPU 核心数量。
local[*] 在本地运行,工作进程数量等于机器的 CPU 核心数量。
spark://HOST:PORT 以 Standalone 模式运行,这是 Spark 自身提供的集群运行模式,默认端口号: 7077。
mesos-client ./spark-shell --master mesos://host:port --deploy-mode client
mesos-cluster ./spark-shell --master mesos://host:port --deploy-mode cluster
yarn-client 在 Yarn 集群上运行,Driver 进程在本地,Work 进程在 Yarn 集群上。./spark-shell --master yarn --deploy-mode client。Yarn 集群地址必须在HADOOP_CONF_DIRorYARN_CONF_DIR 变量里定义
yarn-cluster 在 Yarn 集群上运行,Driver 和Work 进程都在 Yarn 集群上。./spark-shell --master yarn --deploy-mode cluster。Yarn 集群地址必须在HADOOP_CONF_DIRorYARN_CONF_DIR 变量里定义

三、local模式

所谓的 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境,一般用于教学,调试,演示等。

官方求 PI 案例

[yy@hadoop102 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100

基本语法:

bin/spark-submit \
--class <main-class>
--master  <master-url>\
--deploy-mode  <deploy-mode>\
--conf <key>=<value> \
... # other options<application-jar>\
[application-arguments]

参数说明:

–master 指定 Master 的地址,默认为 Local
–class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)
–deploy-mode: 是否发布你的驱动到 worker 节点(cluster) 或者作为一个本地客户端(client) (default: client)*
–conf: 任意的 Spark 配置属性, 格式 key=value. 如果值包含空格,可以加引号“key=value”
application-jar: 打包好的应用 jar,包含依赖. 这个 URL 在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的 path 都包含同样的 jar
application-arguments: 传给 main()方法的参数
–executor-memory 1G 指定每个 executor 可用内存为 1G
–total-executor-cores 2 指定每个 executor 使用的 cup 核数为 2 个

四、Standalone 模式

在 Spark Standalone 模式中,资源调度是由 Spark 自己实现的。 Spark Standalone 模式是 Master-Slaves 架构的集群模式,和大部分的 Master-Slaves 结构的集群一样,存在着 Master 单点故障的问题。对于单点故障的问题,Spark 提供了两种方案:

基于文件系统的单点恢复(Single-Node Recovery with Local File System),将 Application 和 Worker 的注册信息写入文件中,当 Master 宕机时,可以重新启动 Master 进程恢复工作。该方式只适用于开发或测试环境。
        基于 Zookeeper 的 Standby Masters(Standby Masters with ZooKeeper)。ZooKeeper 提供了一个 Leader Election 机制,利用这个机制可以保证虽然集群存在多个 Master,但是只有一个是 Active 的,其他的都是 Standby。当 Active 的 Master 出现故障时,另外的一个 Standby Master 会被选举出来,对于恢复期间正在运行的应用程序,由于 Application 在运行前已经向 Master 申请了资源,运行时 Driver 负责与 Executor 进行通信,管理整个 Application,因此 Master 的故障对 Application 的运行不会造成影响,但是会影响新的 Application 的提交。

1.Standalone-client提交任务方式

  • 提交命令
./spark-submit--master spark://node1:7077--class org.apache.spark.examples.SparkPi../lib/spark-examples-1.6.0-hadoop2.6.0.jar1000

或者

./spark-submit--master spark://node1:7077--deploy-mode client--class org.apache.spark.examples.SparkPi../lib/spark-examples-1.6.0-hadoop2.6.0.jar100
  • 执行原理图解

  • 执行流程

1)client模式提交任务后,会在客户端启动Driver进程。
2)Driver会向Master申请启动Application启动的资源。
3)资源申请成功,Driver端将task发送到worker端执行。
4)worker将task执行结果返回到Driver端。
总结:
        client模式适用于测试调试程序。Driver进程是在客户端启动的,这里的客户端就是指提交应用程序的当前节点。在Driver端可以看到task执行的情况。生产环境下不能使用client模式,是因为:假设要提交100个application到集群运行,Driver每次都会在client端启动,那么就会导致客户端100次网卡流量暴增的问题。

2.Standalone-cluster提交任务方式

  • 提交命令
./spark-submit--master spark://node1:7077--deploy-mode cluster--class org.apache.spark.examples.SparkPi../lib/spark-examples-1.6.0-hadoop2.6.0.jar100
  • 执行原理图解

  • 执行流程

1)cluster模式提交应用程序后,会向Master请求启动Driver。
2)Master接受请求,随机在集群一台节点启动Driver进程。
3)Driver启动后为当前的应用程序申请资源。
4)Driver端发送task到worker节点上执行。
5)worker将执行情况和执行结果返回给Driver端。

总结:

Driver进程是在集群某一台Worker上启动的,在客户端是无法查看task的执行情况的。假设要提交100个application到集群运行,每次Driver会随机在集群中某一台Worker上启动,那么这100次网卡流量暴增的问题就散布在集群上。

五、yarn模式

独立部署(Standalone)模式由 Spark 自身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是你也要记住,Spark 主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是和其他专业的资源调度框架集成会更靠谱一些。

Spark On Yarn 模式的搭建比较简单,仅需要在 Yarn 集群的一个节点上安装 Spark 客户端即可,该节点可以作为提交 Spark 应用程序到 Yarn 集群的客户端。Spark 本身的 Master 节点和 Worker 节点不需要启动。前提是我们需要准备好 Yarn 集群。

1.yarn-client提交任务方式

  • 提交命令
./spark-submit--master yarn--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar100

或者

./spark-submit--master yarn–client--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar100

或者

./spark-submit--master yarn--deploy-mode  client--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar100
  • 执行原理图解

  • 执行流程

1)客户端提交一个Application,在客户端启动一个Driver进程。
2)应用程序启动后会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源。
3)RS收到请求,随机选择一台NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点。
4)AM启动后,会向RS请求一批container资源,用于启动Executor.
5)RS会找到一批NM返回给AM,用于启动Executor。
6)AM会向NM发送命令启动Executor。
7)Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端。

总结:

Yarn-client模式同样是适用于测试,因为Driver运行在本地,Driver会与yarn集群中的Executor进行大量的通信,会造成客户机网卡流量的大量增加。

  • ApplicationMaster的作用:
  1. 为当前的Application申请资源
  2. 给NameNode发送消息启动Executor。

注意:ApplicationMaster有launchExecutor和申请资源的功能,并没有作业调度的功能。

2.yarn-cluster提交任务方式

  • 提交命令
./spark-submit--master yarn--deploy-mode cluster --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar100

或者

./spark-submit--master yarn-cluster--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar100
  • 执行原理图解

  • 执行流程

1)客户机提交Application应用程序,发送请求到RS(ResourceManager),请求启动AM(ApplicationMaster)。
2)RS收到请求后随机在一台NM(NodeManager)上启动AM(相当于Driver端)。
3)AM启动,AM发送请求到RS,请求一批container用于启动Executor。
4)RS返回一批NM节点给AM。
5)AM连接到NM,发送请求到NM启动Executor。
6)Executor反向注册到AM所在的节点的Driver。Driver发送task到Executor。

总结:

Yarn-Cluster主要用于生产环境中,因为Driver运行在Yarn集群中某一台nodeManager中,每次提交任务的Driver所在的机器都是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。只能通过yarn查看日志。

  • ApplicationMaster的作用:
  1. 为当前的Application申请资源
  2. 给NameNode发送消息启动Excutor。
  3. 任务调度。

详解Spark运行模式(local+standalone+yarn)相关推荐

  1. Spark运行模式Local+Standalone+Yarn+mesos

    Spark运行模式Local+Standalone+Yarn+mesos bin/spark-submit --help 注意: --master MASTER_URL spark://host:po ...

  2. Spark运行模式(local standalond,yarn-client,yarn-cluster,mesos-client,mesos-cluster)

    spark部署在单台机器上面时,可以使用本地模式(Local)运行:当部署在分布式集群上面的时候,可以根据自己的情况选择Standalone模式(Spark自带的模式).YARN-Client模式或者 ...

  3. php hiphop mysql_HipHop PHP实战(详解web运行模式)

    Note: These code examples assume the HipHop compiler is fully built. 1 . Setting Up Your Environment ...

  4. spark封神之路(2)-spark运行模式

    本专栏系列视频教程 2 spark运行模式入门 1.官网地址 http://spark.apache.org/ 2.文档查看地址 https://spark.apache.org/docs/2.1.1 ...

  5. 第三章 Spark运行模式及原理

    第三章 Spark运行模式及原理 目录 Spark运行模式概述 Local模式 Standalone模式 Local cluster模式 Mesos模式 YARN standalone/YARN cl ...

  6. 一篇文章读懂:Spark运行模式

    Spark性能调优与原理分析 01.Spark运行模式 运行Spark的应用程序,其实仅仅需要两种角色,Driver和Executor.Driver负责将用户的应用程序划分为多个Job,分成多个Tas ...

  7. init.d,rc.d详解 Linux运行时详解

    Linux 启动时需要哪些步骤呢?本文将详细描述不同的运行级在启动中的作用. 对于那些在DOS/Win9x/NT 平台下的高级用户而言,Linux 似乎是一个怪物.没有config.sys ,没有 a ...

  8. 详解 Spark RDD 的转换操作与行动操作

    前言 本期继续讲解 Spark 核心 RDD 编程部分,内容比较干货也比较长,建议大家先收藏. 学习目标 RDD 的创建 RDD 的转换操作 RDD 的行动操作 惰性求值 1. RDD 的创建 Spa ...

  9. 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程

    @TOC初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程 [1]什么是windows API Windows API 中文翻译过来就是windows应用程序接口(Applica ...

最新文章

  1. 企业为实现网络营销更要将网络营销重点放在用户价值上
  2. matlab中的imsod,Matlab eval用法
  3. [Linux] 使用openssl实现RSA非对称加密
  4. 宝石世界1.0游戏发布
  5. django models模型 内部类 class Meta 简介
  6. 国内11所“袖珍”大学!最小的甚至只有一栋楼……
  7. C语言 Hello World - C语言零基础入门教程
  8. 【阿里内推001期】听说你要做中台,阿里中台部门招Java开发
  9. 第3章 变量和表达式
  10. IE8浏览器跨域接口访问异常的解决办法
  11. 软件设计师历年真题及答案2009-2017
  12. 使用JMeter进行简单的app接口测试
  13. 如何在微信直接下载app?
  14. 电影的幕布效果怎么做?
  15. processing 写的规律图形运动
  16. Druid.io index_realtime实时任务源码分析
  17. A081_Lucene_ElasticSearch
  18. libjpeg解码 jpeg文件
  19. 向前logistic回归与向后筛选出一样的变量_了解逻辑回归系数
  20. 政府的工作流千变万化怎么办(2)

热门文章

  1. 解决火狐浏览器下载文件变为乱码
  2. 小明买了个饭团,原来背后的支付、结算、清算是这样的!
  3. MATLAB转动轮盘
  4. 计算机网络学习一(计算机网络概述)
  5. SSR 应用与原 CSR 应用变更同步问题实践
  6. jdk1.7的HashMap重写以及与1.8的比较
  7. AT2382-[AGC015D]A or...or B Problem
  8. 计算机网络原理之应用层
  9. Gin 框架 核心 httprouter tree树结构解析
  10. 控制工程实践(16)——电气工程上常用计算公式(1)