Spark系列-6、Spark的部署模式DeployMode

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

大数据系列文章目录

官方网址:http://spark.apache.org/、https://databricks.com/spark/about
在这里插入图片描述

目录

  • 介绍
  • 两种模式区别
    • client 模 式
    • cluster模式
    • 两者比较
  • Spark on YARN
    • YARN Client 模 式
    • YARN Cluster 模 式
  • MAIN函数代码执行
  • 再续 Spark 应用
  • 结束

介绍

Spark Application提交运行时部署模式Deploy Mode,表示的是Driver Program运行的地方, 要么是提交应用的Client:client,要么是集群中从节点(Standalone:Worker,YARN: NodeManager):cluster。


--deploy-mode DEPLOY_MODE

Whether to launch the driver program locally ("client") or on one of the worker machines inside the cluster ("cluster")(Default: client).

默认值为client,当时在实际项目中,尤其在生产环境,使用cluster部署模式提交应用运行。

两种模式区别

Cluster和Client模式最本质的区别是:Driver程序运行在哪里。

client 模 式

以Spark Application运行到Standalone集群上为例,前面提交运行圆周率PI或者词频统计WordCount程序时,默认DeployMode为Client,表示应用Driver Program运行在提交应用Client 主机上(启动JVM Process进程),示意图如下:
Spark系列-6、Spark的部署模式DeployMode_第1张图片
假设运行圆周率PI程序,采用client模式,命令如下:


SPARK_HOME=/export/server/spark

${SPARK_HOME}/bin/spark-submit \

--master spark://node1.cn:7077,node2.cn:7077 \

--deploy-mode client \

--driver-memory 512m \

--executor-memory 512m \

--num-executors 1 \

--total-executor-cores 2 \

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

${SPARK_HOME}/examples/jars/spark-examples_2.11-2.4.5.jar \ 10

cluster模式

如果采用cluster模式运行应用,应用Driver Program运行在集群从节点Worker某台机器上。
Spark系列-6、Spark的部署模式DeployMode_第2张图片


SPARK_HOME=/export/server/spark

${SPARK_HOME}/bin/spark-submit \

--master spark://node1.cn:7077,node2.cn:7077 \

--deploy-mode cluster \

--supervise \

--driver-memory 512m \

--executor-memory 512m \

--num-executors 1 \

--total-executor-cores 2 \

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

${SPARK_HOME}/examples/jars/spark-examples_2.11-2.4.5.jar \ 10

两者比较

Cluster和Client模式最最本质的区别是:Driver程序运行在哪里。

  • cluster模式:生产环境中使用该模式
    Driver程序在YARN集群中
    应用的运行结果不能在客户端显示
  • client 模式:学习测试时使用,开发不用,了解即可
    Driver运行在Client上的SparkSubmit进程中
    应用程序运行结果会在客户端显示

Spark on YARN

当应用提交运行到Hadoop YARN上时,包含两个部分:应用管理者AppMaster和于运行应用进程Process(如MapReduce程序MapTask和ReduceTask任务),如下图所示:
Spark系列-6、Spark的部署模式DeployMode_第3张图片

Spark Application提交运行在集群上时,应用架构有两部分组成:Driver Program(资源申请和调度Job执行)和Executors(运行Job中Task任务和缓存数据),都是JVM Process进程:
Spark系列-6、Spark的部署模式DeployMode_第4张图片
所以Spark Application运行在YARN上时,采用不同DeployMode时架构不一样,企业实际生产环境还是以cluster模式为主,client模式用于开发测试,两者的区别面试中常问。

YARN Client 模 式

在YARN Client模式下,Driver在任务提交的本地机器上运行,示意图如下:
Spark系列-6、Spark的部署模式DeployMode_第5张图片
具体流程步骤如下:
1、Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster;
在这里插入图片描述
2、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster, 此时的ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存;
在这里插入图片描述
3、ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程;
4、Executor进程启动后会向Driver反向注册,Executor全部注册完成后,Driver开始执行main 函数;
5、之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分Stage,每个Stage生成对应的TaskSet,之后将Task分发到各个Executor上执行。

以运行词频统计WordCount程序为例,提交命令如下:

/export/server/spark/bin/spark-submit \

--master yarn \

--deploy-mode client \

--driver-memory 512m \

--executor-memory 512m \

--executor-cores 1 \

--num-executors 2 \

--queue default \

--class cn.spark.submit.SparkSubmit \ hdfs://node1.cn:8020/spark/apps/spark-chapter01_2.11-1.0.0.jar \
/datas/wordcount.data /datas/swcy-client

YARN Cluster 模 式

在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster 合为一体,示意图如下
Spark系列-6、Spark的部署模式DeployMode_第6张图片
具体流程步骤如下:
1、任务提交后会和ResourceManager通讯申请启动ApplicationMaster;
2、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster, 此时的ApplicationMaster就是Driver;
Spark系列-6、Spark的部署模式DeployMode_第7张图片
3、Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后在合适的NodeManager上启动Executor进程;
Spark系列-6、Spark的部署模式DeployMode_第8张图片
4、Executor进程启动后会向Driver反向注册;
5、Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行;
以运行词频统计WordCount程序为例,提交命令如下:

/export/server/spark/bin/spark-submit \

--master yarn \

--deploy-mode cluster \

--driver-memory 512m \

--executor-memory 512m \

--executor-cores 1 \

--num-executors 2 \

--queue default \

--class cn.spark.submit.SparkSubmit \ hdfs://node1.cn:8020/spark/apps/spark-chapter01_2.11-1.0.0.jar \
/datas/wordcount.data /datas/swcy-cluster

MAIN函数代码执行

Spark Application应用程序运行时,无论client还是cluster部署模式DeployMode,当Driver Program和Executors启动完成以后,就要开始执行应用程序中MAIN函数的代码,以词频统计WordCount程序为例剖析讲解。
Spark系列-6、Spark的部署模式DeployMode_第9张图片
1、构建SparkContex对象和关闭SparkContext资源,都是在Driver Program中执行,上图中
①和③都是,如下图所示:
Spark系列-6、Spark的部署模式DeployMode_第10张图片
2、上图中②的加载数据【A】、处理数据【B】和输出数据【C】代码,都在Executors上执行,从WEB UI监控页面可以看到此Job(RDD#action触发一个Job)对应DAG图,如下所示:
Spark系列-6、Spark的部署模式DeployMode_第11张图片
将结果数据resultRDD调用saveAsTextFile方法,保存数据到外部存储系统中,代码在Executor 中执行的。但是如果resultRDD调用take、collect或count方法时,获取到最终结果数据返回给Driver, 代码如下:
在这里插入图片描述运行应用程序时,将数组resultArray数据打印到标准输出,Driver Program端日志打印结果:
Spark系列-6、Spark的部署模式DeployMode_第12张图片

综上所述Spark Application中Job执行有两个主要点:

  1. RDD输出函数分类两类
    第一类:返回值给Driver Progam,比如count、first、take、collect等
    第二类:没有返回值,比如直接打印结果、保存至外部存储系统(HDFS文件)等
  2. 在Job中从读取数据封装为RDD和一切RDD调用方法都是在Executor中执行,其他代码都是在Driver Program中执行
    SparkContext创建与关闭、其他变量创建等在Driver Program中执行
    RDD调用函数都是在Executors中执行

再续 Spark 应用

当Spark Application运行在集群上时,主要有四个部分组成,如下示意图:
Spark系列-6、Spark的部署模式DeployMode_第13张图片

1、Driver:是一个JVM Process 进程,编写的Spark应用程序就运行在Driver上,由Driver进程执行;
2、Master(ResourceManager):是一个JVM Process 进程,主要负责资源的调度和分配,并进行集群的监控等职责;
3、Worker(NodeManager):是一个JVM Process 进程,一个Worker运行在集群中的一台服务器上,主要负责两个职责,一个是用自己的内存存储RDD的某个或某些partition;另一个是启动其他进程和线程(Executor),对RDD上的partition进行并行的处理和计算。
4、Executor:是一个JVM Process 进程,一个Worker(NodeManager)上可以运行多个Executor, Executor通过启动多个线程(task)来执行对RDD的partition进行并行计算,也就是执行我们对RDD定义的例如map、flatMap、reduce等算子操作。

Spark支持多种集群管理器(Cluster Manager),取决于传递给SparkContext的MASTER环境变量的值:local、spark、yarn,区别如下:
Spark系列-6、Spark的部署模式DeployMode_第14张图片

结束

到这里,Spark第一部分基础环境以及相关介绍就结束了,下面开始Spark Core系列文章。
Spark系列-6、Spark的部署模式DeployMode_第15张图片

你可能感兴趣的:(大数据专栏,spark,scala,大数据)