大数据Spark部署模式DeployMode

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据Spark部署模式DeployMode

1 两种模式区别

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


这里我做个简单总结下面的话:client模式就是driver运行在本地一般不用各种问题,cluster模式driver运行在Yarn集群中,性能较好,Cluster和Client模式最最本质的区别是:Driver程序运行在哪里。

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


1.1 client 模式

以Spark Application运行到Standalone集群上为例,前面提交运行圆周率PI或者词频统计

WordCount程序时,默认DeployMode为Client,表示应用Driver Program运行在提交应用Client

主机上(启动JVM Process进程),示意图如下:

242227b5a88f4b17a46606413e8d0157.png

假设运行圆周率PI程序,采用client模式,命令如下:

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master spark://node1.oldlu.cn:7077,node2.oldlu.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

1.2 cluster 模式

如果采用cluster模式运行应用,应用Driver Program运行在集群从节点Worker某台机器上,示

意图如下:401980cc9ed64938a6f49d5555ef50c6.png

假设运行圆周率PI程序,采用cluster模式,命令如下:

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master spark://node1.oldlu.cn:7077,node2.oldlu.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

1.3 两者比较

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


cluster模式:生产环境中使用该模式

Driver程序在YARN集群中

应用的运行结果不能在客户端显示

client模式:学习测试时使用,开发不用,了解即可

Driver运行在Client上的SparkSubmit进程中

应用程序运行结果会在客户端显示

2 Spark on YARN

当应用提交运行到Hadoop YARN上时,包含两个部分:应用管理者AppMaster和于运行应用

进程Process(如MapReduce程序MapTask和ReduceTask任务),如下图所示:

b20b361ee5bd4fa680e87002a24b96d4.png


Spark Application提交运行在集群上时,应用架构有两部分组成:Driver Program(资源申请

和调度Job执行)和Executors(运行Job中Task任务和缓存数据),都是JVM Process进程:

741594c9d0974605a17197dc47224b06.png

所以Spark Application运行在YARN上时,采用不同DeployMode时架构不一样,企业实际生

产环境还是以cluster模式为主,client模式用于开发测试,两者的区别面试中常问。


2.1 YARN Client 模式

在YARN Client模式下,Driver在任务提交的本地机器上运行,示意图如下:49ed03b7d4be4f408429971d085478d3.png

具体流程步骤如下:


1)、Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster;

efe34cb7760543e2b877d789305381db.png

2)、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,

此时的ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申

请Executor内存;

7a96bc62d5944590b069d651ea9a608d.png

- 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.oldlu.spark.submit.SparkSubmit \
hdfs://node1.oldlu.cn:8020/spark/apps/spark-chapter01_2.11-1.0.0.jar \
/datas/wordcount.data /datas/swcy-client

2.2 YARN Cluster 模式

在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster

合为一体,示意图如下:

ebf2bcc33aa74a27ad0a6559ff813963.png

具体流程步骤如下:


1)、任务提交后会和ResourceManager通讯申请启动ApplicationMaster;


2)、随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,

此时的ApplicationMaster就是Driver;

d367055f6b1d4dfc8c35386b33f19f36.png


3)、Driver启动后向ResourceManager申请Executor内存,ResourceManager接到

ApplicationMaster的资源申请后会分配Container,然后在合适的NodeManager上启动

Executor进程;

4d4cd31c6cec414890fda5f00e1d230f.png


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.oldlu.spark.submit.SparkSubmit \
hdfs://node1.oldlu.cn:8020/spark/apps/spark-chapter01_2.11-1.0.0.jar \
/datas/wordcount.data /datas/swcy-cluster

3 MAIN函数代码执行

Spark Application应用程序运行时,无论client还是cluster部署模式DeployMode,当Driver

Program和Executors启动完成以后,就要开始执行应用程序中MAIN函数的代码,以词频统计

WordCount程序为例剖析讲解。


5dd7decad03742a9bdaf3e5000cebc8d.png

第一、构建SparkContex对象和关闭SparkContext资源,都是在Driver Program中执行,上图中

①和③都是,如下图所示:3977d55804b44287b98b18b63e38bcf2.png

第二、上图中②的加载数据【A】、处理数据【B】和输出数据【C】代码,都在Executors上执

行,从WEB UI监控页面可以看到此Job(RDD#action触发一个Job)对应DAG图,如下所示:

9d9ae32533584837800f1b439db10d87.png

将结果数据resultRDD调用saveAsTextFile方法,保存数据到外部存储系统中,代码在Executor

中执行的。但是如果resultRDD调用take、collect或count方法时,获取到最终结果数据返回给Driver,

代码如下:ab3330096fb94b5ca4421e0959ad4f4d.png

运行应用程序时,将数组resultArray数据打印到标准输出,Driver Program端日志打印结果:

7532dfdc49f2460c8b8a7c37e34d6fd8.png

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

1)、RDD输出函数分类两类

第一类:返回值给Driver Progam,比如count、first、take、collect等

第二类:没有返回值,比如直接打印结果、保存至外部存储系统(HDFS文件)等

2)、在Job中从读取数据封装为RDD和一切RDD调用方法都是在Executor中执行,其他代码都

是在Driver Program中执行

SparkContext创建与关闭、其他变量创建等在Driver Program中执行

RDD调用函数都是在Executors中执行

4 再续 Spark 应用

当Spark Application运行在集群上时,主要有四个部分组成,如下示意图:

b365ce04f1fc46aabeaeceb9f1a6d7b2.png

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

a76c95534fad4689a04b5dab827af0a0.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
24天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
68 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
23天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
79 2
|
24天前
|
SQL 存储 算法
基于对象 - 事件模式的数据计算问题
基于对象-事件模式的数据计算是商业中最常见的数据分析任务之一。对象如用户、账号、商品等,通过唯一ID记录其相关事件,如操作日志、交易记录等。这种模式下的统计任务包括无序计算(如交易次数、通话时长)和有序计算(如漏斗分析、连续交易检测)。尽管SQL在处理无序计算时表现尚可,但在有序计算中却显得力不从心,主要原因是其对跨行记录运算的支持较弱,且大表JOIN和大结果集GROUP BY的性能较差。相比之下,SPL语言通过强化离散性和有序集合的支持,能够高效地处理这类计算任务,避免了大表JOIN和复杂的GROUP BY操作,从而显著提升了计算效率。
|
24天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
61 1
|
24天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
25天前
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
52 1
|
1月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
63 0
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
42 0
|
1月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
92 0
下一篇
无影云桌面