Spark On Yarn的两种运行模式

文章目录

    • Spark On Yarn两种部署模式介绍
    • Client模式
      • Client模式详细流程
      • Client模式部署测试
    • Cluster模式
      • Cluster模式详细流程
      • Cluster模式部署测试
    • Spark On Yarn两种模式的总结

Spark On Yarn两种部署模式介绍

  • Spark On YARN是有两种运行模式:Cluster模式、Client模式
    • Cluster模式:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内。
    • Client模式即:Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中。

Client模式

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

Spark On Yarn的两种运行模式_第1张图片

Client模式部署测试

  • spark-sumbit提交程序为例,命令如下
bin/spark-submit --master yarn \
> --deploy-mode client \
> --driver-memory 512m \
> --executor-memory 512m \
> --num-executors 3 \
> --total-executor-cores 3 \
> /export/server/spark-3.2.0/examples/src/main/python/pi.py 100

在这里插入图片描述

  • 执行完成之后可以再yarn界面中查看
    在这里插入图片描述
  • 因为任务提交完成之后我们打开spark4040查看,所以我们需要再jobhistory中查看spark job的运行信息,点击即可进入查看。
    在这里插入图片描述
  • 点击Executors之后可以看到以下信息,Executor有三个(之前命令设定的),而driver没有日志,是因为driver根本没有运行在yarn集群容器中,而是运行到了spark-submit所执行的客户端中。
    Spark On Yarn的两种运行模式_第2张图片

Cluster模式

Cluster模式详细流程

  • 在YARN Cluster模式下,Driver运行在NodeManager Contanier中,此时Driver与AppMaster合为一体:
    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上执行。

Spark On Yarn的两种运行模式_第3张图片

Cluster模式部署测试

  • spark-sumbit提交程序为例,命令如下
bin/spark-submit --master yarn \
> --deploy-mode cluster \
> --driver-memory 512m \
> --executor-memory 512m \
> --num-executors 3 \
> --total-executor-cores 3 \
> /export/server/spark-3.2.0/examples/src/main/python/pi.py 100
  • 结果并没有展示出来
    在这里插入图片描述
    在这里插入图片描述
  • 按照之前的方法在进入jobhistory页面中的Executors去查找。因为Driver在cluster模式下运行在容器的内部了,被容器所控制,所以只能在yarn的容器中去查看结果输出。
    在这里插入图片描述
    Spark On Yarn的两种运行模式_第4张图片
    Spark On Yarn的两种运行模式_第5张图片
  • 同样我们在yarn界面中点击改程序,然后点击下方的logs也能查看到输出结果:
  • Spark On Yarn的两种运行模式_第6张图片

Spark On Yarn的两种运行模式_第7张图片

Spark On Yarn两种模式的总结

  • 两种模式的区别
Cluster Yarn
Driver运行位置 YARN容器内 客户端进程
通讯效率
日志查看 日志输出在容器内,查看不方便 日志输出在客户端中,查看方便
生产环境可用性 推荐 不推荐
稳定性 稳定 受客户端进程影响,不稳定
  • Client模式和Cluster模式最最本质的区别是Driver程序运行地点:
    • Client模式(测试开发环境):
      • Driver运行在Client上,和集群的通信成本高。
      • Driver输出结果会在客户端显示。
    • Cluster模式(生产环境):
      • Driver程序在YARN集群中,和集群的通信成本低。
      • Driver输出结果不能在客户端显示。
      • Driver运行ApplicattionMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicattionMaster(Driver)。

你可能感兴趣的:(Spark,spark,大数据,分布式)