• 前言
  • Spark on Yarn集群管理方式
    • Yarn-Client 任务提交方式
    • Yarn-Cluster 任务提交方式
  • Spark Standalone集群管理方式
    • Standalone Client 提交任务方式
    • Standalone Cluster 提交任务方式
  • 总结

前言

本篇主要阐述 Spark 任务提交的流程,其主要目的在于通过了解 Spark 任务提交可以清楚大概的流程,并知道每一步是做什么;当遇到问题可以快速的知道是什么环节或者哪一步骤出现了问题,及时定位到问题并解决。目前Spark官方支持五中集群管理模式,分别是 Standalone、Yarn、Mesoes、Kubernetes、Amazon EC2 等。本篇文章主要阐述笔者平时经常使用的 Standalone 与 Yarn 集群管理模式。

Spark Standalone模式:该模式是不借助于第三方资源管理框架的完全分布式模式。Spark 使用自己的 Master 进程对应用程序运行过程中所需的资源进行调度和管理;对于中小规模的 Spark 集群首选 Standalone 模式。目前Spark 在 Standalone 模式下主要是借助 Zookeeper 实现单点故障问题;思想也是类似于 Hbase Master 单点故障解决方案。

Spark on Yarn模式:该模式是借助于第三方资源管理框架 Yarn 的完全分布式模式。Spark 作为一个提交程序的客户端将 Job 任务提交到 Yarn 上;然后通过 Yarn 来调度和管理 Job 任务执行过程中所需的资源。需要此模式需要先搭建 Yarn 集群,然后将 Spark 作为 Hadoop 中的一个组件纳入到 Yarn 的调度管理下,这样将更有利于系统资源的共享。

Spark on Yarn集群管理方式

Yarn-Client 任务提交方式

  1. 在 YARN Client 模式下,spark-submit提交 Spark Job之后,就会提交的本地机器上启动一个对应的 Driver;
  2. Driver 启动后会与 ResourceManager 建立通讯并发起启动 ApplicationMaster 请求;
  3. ResourceManage 接收到这个 Job 时,会在集群中选一个合适的 NodeManager 并分配一个 Container,及启动 ApplicationMaster(初始化SparkContext);
  4. ApplicationMaster 的功能相当于一个 ExecutorLaucher ,负责向 ResourceManager 申请 Container 资源; ResourceManage 便会与 NodeManager 通信,并启动 Container;
  5. ApplicationMaster 对指定 NodeManager 分配的 Container 发出启动 Executor 进程请求;
  6. Executor进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
  7. Driver 中的 SparkContext 分配 Task 给 Executor 执行,Executor 运行 Task 并向 Driver 汇报运行的状态、进度、以及最终的计算结果;让 Driver 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
  8. 应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请注销并关闭自己。

==> Spark 参数说明

==> Spark 任务提交流程涉及源码说明

Yarn-Cluster 任务提交方式

  1. 在 YARN Cluster 模式下,Spark 任务提交之后会与 ResourceManager 建立通讯,并发出申请启动 ApplicationMaster 请求;
  2. ResourceManage 接收到这个 Job 时,会在集群中选一个合适的 NodeManager 并分配一个 Container;以及启动 ApplicationMaster ,此时的 ApplicationMaster 就是 Driver ;
  3. ApplicationMaster 启动后向 ResourceManager 申请资源,ResourceManager 接到 ApplicationMaster 的资源申请后会在合适(有资源的情况下)的 NodeManager 中分配 Container;
  4. ApplicationMaster 对指定 NodeManager 分配的 Container 发出启动 Executor 进程请求;
  5. Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
  6. ApplicationMaster 中的 SparkContext 分配 Task 给 Executor 执行,Executor 运行 Task 并向ApplicationMaster 汇报运行的状态、进度、以及最终的计算结果;让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
  7. 应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请注销并关闭自己;

Spark Standalone集群管理方式

Standalone Client 提交任务方式

  1. 在 Standalone Client 模式下,spark-submit提交 Spark Job之后,就会提交的本地机器上启动一个对应的 Driver;
  2. Driver 会与 Master 建立通讯,并发出申请启动 Executor 资源的请求;
  3. Master 会通知合适的 Worker 启动 Executor 进程;
  4. Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
  5. Driver 分配 Task 给 Executor 执行,Executor 运行 Task 并向 Driver 汇报运行的状态、进度、以及最终的计算结果;让 Driver 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
  6. Job 任务完成之后,Driver 会向 Master 申请注销并关闭自己;

Standalone Cluster 提交任务方式

  1. 在 Standalone Cluster 模式下,Spark 任务提交之后会与 Master 建立通讯,并发出申请启动 Driver的请求;
  2. Master 接收到这个 Job 时,会在集群中选一个合适的 Worker 并分配一个 Driver;
  3. Driver 启动后为当前的 Spark Job申请资源;
  4. Master 会通知合适的 Worker 启动 Executor 进程;
  5. Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
  6. Driver 分配 Task 给 Executor 执行,Executor 运行 Task 并向 Driver 汇报运行的状态、进度、以及最终的计算结果;让 Driver 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
  7. Job 任务完成之后,Driver 会向 Master 申请注销并关闭自己;

总结

  • Spark standalone 与 Spark on Yarn 都是资源调度管理,底层实现的方式不一样。Standalone 模式只支持简单的 FIFO 调度器(单用户串行,排队先来先执行),而 Yarn 有 FIFO 调度器、容器调度器(Capacity Scheduler)、公平调度器(Fair Scheduler)等三种;可以实现动态资源的扩展,以及资源调度更为灵活。
  • 目前笔者所了解使用更多的是 Yarn 资源调度器,其 Yarn 资源调度器也是基于 Hadoop 集群;Standalone 资源调度器是基于 Spark 集群,相对于 Hadoop 集群其的生态更为完善,有利于进行集群的扩展于维护。
  • Yarn Client 与 Yarn Cluster 任务提交方式两者区别,可以通过上面的 Spark 任务提交流程图可以看出来;主要区别在于 Driver的创建的位置不一样,Client 方式是直接在本地机器上创建一个 Driver 进程,而 Cluster 方式在通过 ResourceManager 在某一个 NodeManager 中创建一个 Driver。
  • 在使用场景当中,Yarn Client 方式一般适用于进行 Job 的调试(Debug),因为 Driver 是在本地可以直接远程断点调试,而且 Driver 会与 Executor 进行大量的通信就会造成占用大量 IO ;Yarn Cluster 方式一般适用于生产环境,因为 Driver 运行在 某一个 NodeManager 中就不会出现某一台机器出现网卡激增的情况,缺点就是运行的 Job 日志不能在机器本地实时查看而是需要通过 Job Web 界面查看。

参考链接:https://spark.apache.org/docs/3.2.1/spark-standalone.html

Spark 任务提交流程说明相关推荐

  1. Spark任务提交流程

    文章目录 1.Standalone-Client 2.Standalone-cluster 3.Yarn-Client模式 4.Yarn-Cluster 1.Standalone-Client [ro ...

  2. Spark Submit任务提交流程

    1,简介 在上一篇博客中,我们详细介绍了Spark Standalone模式下集群的启动流程.在Spark 集群启动后,我们要想在集群上运行我们自己编写的程序,该如何做呢?本篇博客就主要介绍Spark ...

  3. Spark操作Hive(开启Kerberos认证)代码提交华为云DAYU的MRS Spark组件--方法流程及注意事项

    背景: 最近在测试华为云DAYU MRS Spark操作Hive的流程,因kerberos认证的问题一直测试失败. 代码示例: val sparkSession = SparkSession.buil ...

  4. 【概述】spark(一):spark特点、知识范畴、spark架构、任务提交流程、支持哪些运行环境

    学习或者复习一门技术之前需要认识这个技术:包括这个技术的特点.架构.它是怎么运作的.它能在哪里运行等: 然后可以学习怎么使用它开放的API对一些业务场景进行开发实现: 其次对于某些特定场景我们可能使用 ...

  5. Spark任务提交底层原理

    Driver的任务提交过程 1.Driver程序的代码运行到action操作,触发了SparkContext的runJob方法. 2.SparkContext调用DAGScheduler的runJob ...

  6. Spark任务执行流程

    这是Spark官方给的图,大致意思就是: 四个步骤 1.构建DAG(有向无环图)(调用RDD上的方法) 2.DAGScheduler将DAG切分Stage(切分的依据是Shuffle),将Stage中 ...

  7. Arxiv 论文提交流程——看这篇就够了

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:刘浚嘉 | 来源:知乎 https://zhuanlan.zhihu.com/p/1094051 ...

  8. Spark任务提交源码

    文章目录 一.向Master申请启动Driver 二.启动Driver 三.DriverWrapper向Master申请资源(给Application) 一.向Master申请启动Driver Spa ...

  9. Spark学习(四) -- Spark作业提交

    标签(空格分隔): Spark 作业提交 先回顾一下WordCount的过程: sc.textFile("README.rd").flatMap(line => line.s ...

最新文章

  1. 解决【Bootstrap‘s JavaScript requires jQuery】的问题
  2. js 读取flask后台变量
  3. Google地图搜索的触角伸向月球
  4. .net core 调用c dll_工具:搭建Camp;C,一睹模样
  5. 程序设计工程师c语言,《C语言程序设计》自学百问.doc
  6. 【回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
  7. freeSHHd+puttygen搭建Sftp
  8. python去重txt文本_Python实现的txt文件去重功能示例
  9. 创客集结号:3D打印如何与中小学教育有机结合?
  10. 软件测试人员考核办法
  11. vue 直接访问静态图片_vue本地静态图片的路径问题解决方案
  12. QT Creator4.3制作图标
  13. Testin发布众测平台 助开发者发现质量缺陷建立质量体系
  14. 排列组合(9月8日更新
  15. 【CAPL】CAPL的简单介绍及变量
  16. linux proc 文件系统下 entry 的解释(转)
  17. 帅气的团队介绍HTML源码
  18. 以连边为中心的功能连接用于个体识别
  19. 计算机专业要不要考研——写的很棒
  20. csharp进阶练习题:Esolang口译#1 - 介绍Esolangs和我的第一个解释(MiniStringFuck)【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手

热门文章

  1. Java入坑指南,学Java需要具备哪些前提条件?
  2. springboot 整合 mqtt 实现消息订阅
  3. 四川途志:看了抖音创作的规则你真的会玩抖音吗?
  4. 人物照片墙html模板,制作散落照片墙效果人物照片的PS教程
  5. MD5 到底是不是加密?
  6. WPF开源UI界面框架项目
  7. Opencv连通域检测
  8. 理解矩阵 from孟岩--流星小屋
  9. SAP BDC数据批量导入功能
  10. 详细图解如何注册 Navicat for Mysql 11.0.17 企业版(Win7 64bit)