0


详解Spark运行模式(local+standalone+yarn)

一、简述

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 URLMeaninglocal在本地运行,只有一个工作进程,无并行计算能力。local[K]在本地运行,有 K 个工作进程,通常设置 K 为机器的CPU 核心数量。local[*]在本地运行,工作进程数量等于机器的 CPU 核心数量。spark://HOST:PORT以 Standalone 模式运行,这是 Spark 自身提供的集群运行模式,默认端口号: 7077。mesos-client./spark-shell --master mesos://host:port --deploy-mode clientmesos-cluster./spark-shell --master mesos://host:port --deploy-mode clusteryarn-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.jar

1000

或者

./spark-submit

--master spark://node1:7077

--deploy-mode client

--class org.apache.spark.examples.SparkPi

../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100
  • 执行原理图解

  • 执行流程

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.jar

100
  • 执行原理图解

  • 执行流程

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.jar

100

或者

./spark-submit

--master yarn–client

 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100

或者

./spark-submit

--master yarn

--deploy-mode  client

 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100
  • 执行原理图解

  • 执行流程

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.jar

100

或者

./spark-submit

--master yarn-cluster

--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar

100
  • 执行原理图解

  • 执行流程

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. 任务调度。

本文转载自: https://blog.csdn.net/u010147215/article/details/125545826
版权归原作者 YaoYong_BigData 所有, 如有侵权,请联系我们删除。

“详解Spark运行模式(local+standalone+yarn)”的评论:

还没有评论