【Spark分布式内存计算框架——Spark 基础环境】8. 部署模式DeployMode

第七章 部署模式DeployMode

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部署模式提交应用运行。

7.1 两种模式区别

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

client 模式
以Spark Application运行到Standalone集群上为例,前面提交运行圆周率PI或者词频统计
WordCount程序时,默认DeployMode为Client,表示应用Driver Program运行在提交应用Client主机上(启动JVM Process进程),示意图如下:
在这里插入图片描述
假设运行圆周率PI程序,采用client模式,命令如下:

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master spark://node1.itcast.cn:7077,node2.itcast.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某台机器上,示意图如下:
在这里插入图片描述
假设运行圆周率PI程序,采用cluster模式,命令如下:

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master spark://node1.itcast.cn:7077,node2.itcast.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进程中
    • 应用程序运行结果会在客户端显示
7.2 Spark on YARN

当应用提交运行到Hadoop YARN上时,包含两个部分:应用管理者AppMaster和于运行应用进程Process(如MapReduce程序MapTask和ReduceTask任务),如下图所示:
在这里插入图片描述
Spark Application提交运行在集群上时,应用架构有两部分组成:Driver Program(资源申请和调度Job执行)和Executors(运行Job中Task任务和缓存数据),都是JVM Process进程:
在这里插入图片描述

所以Spark Application运行在YARN上时,采用不同DeployMode时架构不一样,企业实际生产环境还是以cluster模式为主,client模式用于开发测试,两者的区别面试中常问。

YARN Client 模式
在YARN Client模式下,Driver在任务提交的本地机器上运行,示意图如下:
在这里插入图片描述
具体流程步骤如下:

  • 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.itcast.spark.submit.SparkSubmit \
hdfs://node1.itcast.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合为一体,示意图如下:
在这里插入图片描述
具体流程步骤如下:

  • 1)、任务提交后会和ResourceManager通讯申请启动ApplicationMaster;
  • 2)、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver;
  • 3)、Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后在合适的NodeManager上启动Executor进程;
  • 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.itcast.spark.submit.SparkSubmit \
hdfs://node1.itcast.cn:8020/spark/apps/spark-chapter01_2.11-1.0.0.jar \
/datas/wordcount.data /datas/swcy-cluster
7.3 MAIN函数代码执行

Spark Application应用程序运行时,无论client还是cluster部署模式DeployMode,当Driver Program和Executors启动完成以后,就要开始执行应用程序中MAIN函数的代码,以词频统计WordCount程序为例剖析讲解。
在这里插入图片描述

  • 第一、构建SparkContex对象和关闭SparkContext资源,都是在Driver Program中执行,上图中①和③都是,如下图所示:
    在这里插入图片描述

  • 第二、上图中②的加载数据【A】、处理数据【B】和输出数据【C】代码,都在Executors上执行,从WEB UI监控页面可以看到此Job(RDD#action触发一个Job)对应DAG图,如下所示:
    在这里插入图片描述
    将结果数据resultRDD调用saveAsTextFile方法,保存数据到外部存储系统中,代码在Executor中执行的。但是如果resultRDD调用take、collect或count方法时,获取到最终结果数据返回给Driver,代码如下:
    在这里插入图片描述
    运行应用程序时,将数组resultArray数据打印到标准输出,Driver Program端日志打印结果:
    在这里插入图片描述

综上所述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运行在集群上时,主要有四个部分组成,如下示意图:
在这里插入图片描述

  • 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,区别如下:

MasterURL Meaning
local在本地运行,只有一个工作进程,无并行计算能力。
local[K]在本地运行,有K个工作进程,通常设置K为机器的CPU核心数量。
local[*]在本地运行,工作进程数量等于机器的CPU核心数量。
spark://HOST:PORT以Standalone模式运行,这是Spark自身提供的集群运行模式,默认端口号: 7077。详细文档见:Spark standalone cluster。
Client 部署模式:7077
Cluster 部署模式:6066
mesos://HOST:PORT在Mesos集群上运行,Driver进程和Worker进程运行在Mesos集群上,部署模式必须使用固定值:–deploy-mode cluster。详细文档见:MesosClusterDispatcher.
yarn-client
–master yarn
–deploy-mode client
在Yarn集群上运行,Driver进程在本地,Executor进程在Yarn集群上,部署模式必须使用固定值:–deploy-mode client。Yarn集群地址必须在HADOOP_CONF_DIR or YARN_CONF_DIR变量里定义。
yarn-cluster
–master yarn
–deploy-mode cluster
在Yarn集群上运行,Driver进程在Yarn集群上,Executor进程也在Yarn集群上,部署模式必须使用固定值:–deploy-mode cluster。Yarn集群地址必须在HADOOP_CONF_DIR or YARN_CONF_DIR变量里定义
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdnGuoYuying

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值