如果spark程序是运行在yarn上面的话,那么就不需要spark 的集群了,只需要找任意一台机器配置我们的spark的客户端提交任务到yarn集群上面去即可。
二、Spark On Yarn本质将Spark任务的pyspark文件,经过Py4J转换,提交到Yarn的JVM中去运行
三、Spark ON YARN需要的东西Yarn集群提交工具:spark-submit命令被提交的PySpark代码:Spark任务的文件需要其他依赖jar:Yarn的JVM运行PySpark的代码经过Py4J转化为字节码,需要Spark的jar包支持!Spark安装目录中有jar包,在spark/jars/中 五、Spark on YARN的两种部署模式 一、介绍
当一个MR应用提交运行到Hadoop YARN上时包含两个部分:应用管理者AppMaster和运行应用进程Process(如MapReduce程序MapTask和ReduceTask任务),如下图所示:
当一个Spark应用提交运行在集群上时,应用架构有两部分组成:Driver Program(资源申请和调度Job执行)和Executors(运行Job中Task任务和缓存数据),都是JVM Process进程:
而Driver程序运行的位置可以通过–deploy-mode 来指定,值可以是:
client:表示Driver运行在提交应用的Client上(默认)、cluster:表示Driver运行在集群中(Standalone:Worker,YARN:NodeManager) 二、client模式
DeployMode为Client,表示应用Driver Program运行在提交应用Client主机上,示意图如下:
# 运行圆周率PI程序,采用client模式,命令如下:
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit
--master yarn
--deploy-mode client
--driver-memory 512m
--executor-memory 512m
--executor-cores 1
--num-executors 2
--queue default
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3"
--conf "spark.pyspark.python=/root/anaconda3/bin/python3"
${SPARK_HOME}/examples/src/main/python/pi.py
10
三、YARN Client模式详细流程
在YARN Client模式下,Driver在任务提交的本地机器上运行,示意图如下:
- Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster;随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存;ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程;Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数;之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分Stage,每个Stage生成对应的TaskSet,之后将Task分发到各个Executor上执行。
DeployMode为Cluster,表示应用Driver Program运行在集群从节点某台机器上,示意图如下:
# 运行圆周率PI程序,采用cluster模式,命令如下:
${SPARK_HOME}/bin/spark-submit
--master yarn
--deploy-mode cluster
--driver-memory 512m
--executor-memory 512m
--executor-cores 1
--num-executors 2
--queue default
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3"
--conf "spark.pyspark.python=/root/anaconda3/bin/python3"
${SPARK_HOME}/examples/src/main/python/pi.py
10
在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster合为一体,示意图
- 任务提交后会和ResourceManager通讯申请启动ApplicationMaster;随后ResourceManager分配Container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver;Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配Container,然后在合适的NodeManager上启动Executor进程;Executor进程启动后会向Driver反向注册;Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行;
Client模式和Cluster模式最本质的区别是:Driver程序运行在哪里
Client模式:学习测试时使用,开发不用
Driver运行在Client上,和集群的通信成本高Driver输出结果会在客户端显示 Cluster模式:生产环境中使用该模式
Driver程序在YARN集群中,和集群的通信成本低Driver输出结果不能再客户端显示该模式下Driver运行ApplicationMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicationMaster(Driver)



