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程序运行在哪里。

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

client模式:
在这里插入图片描述

cluster模式:
在这里插入图片描述

附录: 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等算子操作。

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/112557164