文章目录概要Client模式演示说明Cluster模式演示说明Cluster模式与Cluster模式的区别Spark on YARNYARN Client模式演示说明YARN Cluster模式演示说明程序主函数执行情况补充
个人资料
Spark Application提交运行时部署模式Deploy Mode,并指示驱动程序程序的运行位置。 是要提交APP应用的客户端:客户端,还是群集中的从节点(Standalone:Worker,YARN:NodeManager ):cluster。
默认值为client,在实际开发环境中,特别是在生产环境中,使用cluster部署模式提交APP应用程序的执行。
客户端模式演示说明以Spark Application在标准群集上运行为例。 上次提交圆周率PI或字数统计信息WordCount程序运行时,缺省深度模式为Client,表示APP驱动程序正在提交APP client主机上运行
运行圆周率PI程序,采用客户端模式,命令如下:
spark _ home=/export/server/spark $ { spark _ home } /振动的高跟鞋/spark-submit--master spark 3360//master 360
在群集模式演示中,在群集模式下运行APP时,APP驱动程序程序将在具有从群集节点Worker的计算机上运行,映像如下所示:
假设您运行圆周率PI程序并采用了cluster模式,则命令将如下所示:
spark _ home=/export/server/spark $ { spark _ home } /振动的高跟鞋/spark-submit--master spark 3360//master 360 --executor-memory 512 m--num-executors1-- total-executor-cores2$ { spark _ home }/examples/jars/spar
开车时注意差异!
Cilent模式和Cluster模式的区别Cluster模式和Client模式最本质的区别在于驱动程序在哪里运行。
群集模式:客户端无法显示在YARN群集中由在生产环境中使用此模式的驱动程序应用的执行结果。 在学习测试时使用。 如果在驱动程序中开发了无法在客户端上执行的SparkSubmit进程,则执行APP的结果将显示spark on YARN APP应用程序将在客户端上执行yarn。
1 .负责1.AppMaster、APP应用管理员、APP应用运行时资源申请(RM )及任务的执行与监控。 2 .启动进程进程并执行任务任务。 例如,运行MapReduce程序。 此时,这些进程都是映射任务和记录任务,都在容器容器中运行。 spark APP应用程序执行群集配置:
1 .负责驱动程序程序、APP应用程序管理员、整个APP应用程序的运行时资源申请和任务的执行和监控。 申请资源并运行执行程序。 2 .执行程序,进程执行任务任务并缓存数据。 在Hadoop YARN上提交APP应用程序时,它包括两个部分: APP应用程序管理员AppMaster和应用进程Process,如MapReduce程序映射任务和还原任务,如下图所示。
如果Spark Application提交在群集上运行,则APP应用程序体系结构由两部分组成。 驱动程序程序(运行资源请求和调度作业)和执行作业(运行作业任务和缓存数据)都是JVM进程。
因此,Spark Application在YARN上运行时,采用深度模式的体系结构不同,企业的实际生产环境还是以集群模式为主,客户端模式用于开发测试,是两者的区别
在YARN Client模式演示中,在YARN Client模式下进行驱动
er在任务提交的本地机器上运行,示意图如下:具体流程步骤如下: 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/震动的高跟鞋/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --executor-cores 1 --num-executors 2 --queue default --class cn.kaizi.spark.start.SparkSubmit hdfs://master:8020/spark/apps/spark-day02_2.11-1.0-SNAPSHOT.jar /datas/wordcount.data /datas/swc-client YARN Cluster 模式演示说明在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster合为一体,示意图如下:
具体流程步骤如下:
以运行词频统计WordCount程序为例,提交命令如下:
/export/server/spark/震动的高跟鞋/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --executor-cores 1 --num-executors 2 --queue default --class cn.kaizi.spark.start.SparkSubmit hdfs://master:8020/spark/apps/spark-day02_2.11-1.0-SNAPSHOT.jar /datas/wordcount.data /datas/swc-cluster我在 slave2 中运行上述命令:(同时查看三台主机的jps进程情况,注意蓝色标注内容)
通过历史服务器对比的产看俩种模式下的executor情况
如下是 client 模式下的,发现 driver 不可以查看日志信息。
对比查看 cluster 模式下 driver 可以查看日志信息。
Spark Application应用程序运行时,无论client还是cluster部署模式DeployMode,当Driver Program和Executors启动完成以后,就要开始执行应用程序中MAIN函数的代码,以词频统计WordCount程序为例剖析讲解。
如下图:是之前做的 WordCount 程序案例代码
Scala代码:WordCount、TopKey
2.上图中②的加载数据据【A】、处理数据【B】和输出数据【C】代码,都在 Executors 上执行,从 WEB UI 监控页面可以看到此 Job(RDD#action触发一个Job)对应DAG图,如下图所示:
将结果数据 resultRDD调用 saveAsTextFile 方法,保存数据到外部存储系统中,代码在 Executor 中执行的。但是如果 resultRDD 调用 take、collect 或 count 方法时,获取到最终结果数据返回给 Driver , 代码如下: val resultArray: Array[(String, Int)] = resultRDD.collect()resultArray.foreach(println)
运行应用程序时,将数组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 Application运行在集群上时,主要有四个部分组成,如下示意图:
Spark 支持多种集群管理器(Cluster Manager),取决于传递给 SparkContext 的MASTER环境变量的值:local、spark、yarn,区别如下:
Master URLMeaninglocal在本地运行,只有一个工作进程,无并行计算能力。local[K]在本地运行,有K个工作进程,通常设置K为机器的CPU核心数量。local[*]在本地运行,工作进程数量等于机器的CPU核心数量。spark://HOST:PORT以Standalone模式运行,这是Spark自身提供的集群运行模式,默认端口号: 7077。Client部署模式:7077 。Cluster部署模式:6066mesos://HOST:PORT在Mesos集群上运行,Driver进程和Worker进程运行在Mesos集群上,部署模式必须使用固定值:–deploy-mode cluster。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变量里定义。