首页 > 编程知识 正文

mapreduce应用场景,搭建spark集群

时间:2023-05-03 22:57:09 阅读:107761 作者:1134

目录12种模式差异1.1 client模式1.2 cluster模式1.3两者比较2 Spark on YARN2.1 YARN Client模式2.2 YARN Cluster模式3 MAIN函数代码执行4次连续spark APP

12种模式的不同

Spark Application提交运行时部署模式部署模式是Driver Program的运行位置、提交APP的客户端: client或群集中的从节点(standalone:)

简单来说,客户端模式意味着驱动程序在本地运行,而驱动程序模式在Yarn群集中运行,并且性能较高。 cluster模式和client模式最本质的区别在于驱动程序在哪里运行。

- deploy-modewhethertolaunchthedriverprogramlocally (client ) ) orononeoftheworkermachinesinsidethecluster () 在实际项目中,特别是在生产环境中,使用了cluster部署模式来提交APP应用程序的执行。

1.1在客户端模式下,演示了Spark Application在标准群集上运行的示例,之前提出了运行圆周率PI或词数统计

对于WordCount程序,缺省深度模式为Client,表示APP驱动程序正在提交APP client上运行

在主机上(启动JVM Process进程),映像如下所示:

假设您运行圆周率PI程序并采用了客户端模式,则命令将如下所示:

spark _ home=/export/server/spark $ { spark _ home }/JZ dwd/spark-submit--master spark ://node1/ood --executor-memory 512 m--num-executors1-- total-executory-class org.Apache.spark.examples.spark pi

意图如下。

假设您运行圆周率PI程序并采用了cluster模式,则命令将如下所示:

spark _ home=/export/server/spark $ { spark _ home }/JZ dwd/spark-submit--master spark ://node1/ood --executor-memory 512 m--num-executors1-- class org.Apache.spark.examples.spark pi $ { spark _ home

cluster模式:客户端不能看到在生产环境中使用此模式的驱动程序在YARN群集中应用的运行结果。 是在学习测试时使用,还是在开发时使用都没有关系。 如果理解,客户端将看到Driver在客户端上运行的SparkSubmit进程执行APP应用的结果,2 Spark on YARN将提交给Hadoop YARN并执行

流程Process,如MapReduce程序映射任务和重做任务,应如下图所示。

如果Spark Application提交在群集上运行,则APP应用程序体系结构由两部分组成:驱动程序计划

调度作业的执行)和Executors (执行作业中的Task任务和缓存数据)都是JVM Process进程。

因此,当Spark Application在YARN上运行时,不同的部署模式具有不同的体系结构,实际上企业就是这样诞生的

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

2.1 YARN Client模式在YARN Client模式下,驱动程序在提交任务的本地计算机上运行。 图像如下所示。

具体流程

程步骤如下:

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/jzdwd/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
合为一体,示意图如下:

具体流程步骤如下:

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/jzdwd/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程序为例剖析讲解。

第一、构建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中执行 4 再续 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,区别如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。