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

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

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

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

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 结果并没有展示出来
      在这里插入图片描述
      在这里插入图片描述
    • 按照之前的方法在进入jobhistory页面中的Executors去查找。因为Driver在cluster模式下运行在容器的内部了,被容器所控制,所以只能在yarn的容器中去查看结果输出。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 同样我们在yarn界面中点击改程序,然后点击下方的logs也能查看到输出结果:
    • 在这里插入图片描述

    在这里插入图片描述

    Spark On Yarn两种模式的总结

    • 两种模式的区别
    ClusterYarn
    Driver运行位置YARN容器内客户端进程
    通讯效率
    日志查看日志输出在容器内,查看不方便日志输出在客户端中,查看方便
    生产环境可用性推荐不推荐
    稳定性稳定受客户端进程影响,不稳定
    • Client模式和Cluster模式最最本质的区别是Driver程序运行地点:
      • Client模式(测试开发环境):
        • Driver运行在Client上,和集群的通信成本高。
        • Driver输出结果会在客户端显示。
      • Cluster模式(生产环境):
        • Driver程序在YARN集群中,和集群的通信成本低。
        • Driver输出结果不能在客户端显示。
        • Driver运行ApplicattionMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicattionMaster(Driver)。
  • 相关阅读:
    好心情:6种会加重抑郁症的食物,你却每天都在吃
    从0开始制作ArcGis——第一章
    Linux 日志管理
    【layui-table】转静态表格时固定表格列处理行高和单元格颜色
    C++&QT day1
    Python提取指定颜色区域并填充闭合区间
    一篇文章带你了解网页框架——Vue简单入门
    docker小白使用笔记
    VMware-安装 CentOs-Linux 操作系统
    腾讯云阿里云云服务器 Linux 操作系统 BT 宝塔面板快速建站教程
  • 原文地址:https://blog.csdn.net/sinat_31854967/article/details/127728987