Spark On Yarn环境原理

一、Spark on YARN的优势

如果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 On Yarn环境原理_第1张图片

  • 当一个Spark应用提交运行在集群上时,应用架构有两部分组成:Driver Program(资源申请和调度Job执行)和Executors(运行Job中Task任务和缓存数据),都是JVM Process进程:
    Spark On Yarn环境原理_第2张图片

  • 而Driver程序运行的位置可以通过–deploy-mode 来指定,值可以是:

    • client:表示Driver运行在提交应用的Client上(默认)、
    • cluster:表示Driver运行在集群中(Standalone:Worker,YARN:NodeManager)

二、client模式

DeployMode为Client,表示应用Driver Program运行在提交应用Client主机上,示意图如下:

Spark On Yarn环境原理_第3张图片

# 运行圆周率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

Spark On Yarn环境原理_第4张图片

三、YARN Client模式详细流程

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

Spark On Yarn环境原理_第5张图片

  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上执行。

四、cluster模式

DeployMode为Cluster,表示应用Driver Program运行在集群从节点某台机器上,示意图如下:

Spark On Yarn环境原理_第6张图片

# 运行圆周率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

Spark On Yarn环境原理_第7张图片Spark On Yarn环境原理_第8张图片Spark On Yarn环境原理_第9张图片
Spark On Yarn环境原理_第10张图片

五、YARN Cluster详细流程

在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster合为一体,示意图

Spark On Yarn环境原理_第11张图片

  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上执行;

六、总结

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

  • Client模式:学习测试时使用,开发不用
    • Driver运行在Client上,和集群的通信成本高
    • Driver输出结果会在客户端显示
  • Cluster模式:生产环境中使用该模式
    • Driver程序在YARN集群中,和集群的通信成本低
    • Driver输出结果不能再客户端显示
    • 该模式下Driver运行ApplicationMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicationMaster(Driver)

你可能感兴趣的:(#,Spark计算引擎,spark,yarn,big,data)