Spark on yarn的两种模式详解(这个很重要哦)

简介: 当一个Spark应用提交到集群上运行时,应用架构包含了两个部分

  • Driver Program(资源申请和调度Job执行)
  • Executors(运行Job中Task任务和缓存数据),两个都是JVM Process进程

在这里插入图片描述

1: Driver程序运行的位置可以通过–deploy-mode 来指定:

明确: Driver指的是The process running the main() function of the application and creating the SparkContext
运行应用程序的main()函数并创建SparkContext的进程

  • client:表示Driver运行在提交应用的Client上(默认)

  • cluster:表示Driver运行在集群中(Standalone:Worker,YARN:NodeManager)

  • cluster和client模式最最本质的区别是:Driver程序运行在哪里。
    企业实际生产环境中使用cluster

1. Client(客户端)模式
  • DeployMode为Client,表示应用Driver Program运行在提交应用Client主机上
    示意图:
    在这里插入图片描述
    Client模式测试圆周率:
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master yarn  \
--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

在这里插入图片描述
Yarn的webUI查看结果:
在这里插入图片描述

2. cluster(集群)模式,生产环境用
  • DeployMode为Cluster,表示应用Driver Program运行在集群从节点某台机器上

示意图:
在这里插入图片描述
圆周率测试:

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--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

在这里插入图片描述
yarn的webUI:
在这里插入图片描述

进入该任务里面查看log
在这里插入图片描述
在这里插入图片描述
总结:
Client模式和Cluster模式最最本质的区别是:Driver程序运行在哪里。

  • Client模式:测试时使用,开发不用,了解即可
    1.Driver运行在Client上,和集群的通信成本高
    2.Driver输出结果会在客户端显示
  • Cluster模式:生产环境中使用该模式
    1.Driver程序在YARN集群中,和集群的通信成本低
    2.Driver输出结果不能在客户端显示
    3.该模式下Driver运行ApplicattionMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicattionMaster(Driver)
3. 两种模式的详细流程图

client模式图示:

在YARN Client模式下,Driver在任务提交的本地机器上运行
在这里插入图片描述

  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模式示意图:

在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster合为一体
在这里插入图片描述

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

附录: Spark集群中的角色

  • 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等算子操作。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值