Spark 任务提交流程说明
- 前言
- 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 任务提交方式
- 在 YARN Client 模式下,
spark-submit
提交 Spark Job之后,就会提交的本地机器上启动一个对应的 Driver; - Driver 启动后会与 ResourceManager 建立通讯并发起启动 ApplicationMaster 请求;
- ResourceManage 接收到这个 Job 时,会在集群中选一个合适的 NodeManager 并分配一个 Container,及启动 ApplicationMaster(初始化
SparkContext
); - ApplicationMaster 的功能相当于一个 ExecutorLaucher ,负责向 ResourceManager 申请 Container 资源; ResourceManage 便会与 NodeManager 通信,并启动 Container;
- ApplicationMaster 对指定 NodeManager 分配的 Container 发出启动 Executor 进程请求;
- Executor进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
- Driver 中的 SparkContext 分配 Task 给 Executor 执行,Executor 运行 Task 并向 Driver 汇报运行的状态、进度、以及最终的计算结果;让 Driver 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
- 应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请注销并关闭自己。
==> Spark 参数说明
==> Spark 任务提交流程涉及源码说明
Yarn-Cluster 任务提交方式
- 在 YARN Cluster 模式下,Spark 任务提交之后会与 ResourceManager 建立通讯,并发出申请启动 ApplicationMaster 请求;
- ResourceManage 接收到这个 Job 时,会在集群中选一个合适的 NodeManager 并分配一个 Container;以及启动 ApplicationMaster ,此时的 ApplicationMaster 就是 Driver ;
- ApplicationMaster 启动后向 ResourceManager 申请资源,ResourceManager 接到 ApplicationMaster 的资源申请后会在合适(有资源的情况下)的 NodeManager 中分配 Container;
- ApplicationMaster 对指定 NodeManager 分配的 Container 发出启动 Executor 进程请求;
- Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
- ApplicationMaster 中的 SparkContext 分配 Task 给 Executor 执行,Executor 运行 Task 并向ApplicationMaster 汇报运行的状态、进度、以及最终的计算结果;让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
- 应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请注销并关闭自己;
Spark Standalone集群管理方式
Standalone Client 提交任务方式
- 在 Standalone Client 模式下,
spark-submit
提交 Spark Job之后,就会提交的本地机器上启动一个对应的 Driver; - Driver 会与 Master 建立通讯,并发出申请启动 Executor 资源的请求;
- Master 会通知合适的 Worker 启动 Executor 进程;
- Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
- Driver 分配 Task 给 Executor 执行,Executor 运行 Task 并向 Driver 汇报运行的状态、进度、以及最终的计算结果;让 Driver 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
- Job 任务完成之后,Driver 会向 Master 申请注销并关闭自己;
Standalone Cluster 提交任务方式
- 在 Standalone Cluster 模式下,Spark 任务提交之后会与 Master 建立通讯,并发出申请启动 Driver的请求;
- Master 接收到这个 Job 时,会在集群中选一个合适的 Worker 并分配一个 Driver;
- Driver 启动后为当前的 Spark Job申请资源;
- Master 会通知合适的 Worker 启动 Executor 进程;
- Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行执行 Job 任务;
- Driver 分配 Task 给 Executor 执行,Executor 运行 Task 并向 Driver 汇报运行的状态、进度、以及最终的计算结果;让 Driver 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
- 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 任务提交流程说明相关推荐
- Spark任务提交流程
文章目录 1.Standalone-Client 2.Standalone-cluster 3.Yarn-Client模式 4.Yarn-Cluster 1.Standalone-Client [ro ...
- Spark Submit任务提交流程
1,简介 在上一篇博客中,我们详细介绍了Spark Standalone模式下集群的启动流程.在Spark 集群启动后,我们要想在集群上运行我们自己编写的程序,该如何做呢?本篇博客就主要介绍Spark ...
- Spark操作Hive(开启Kerberos认证)代码提交华为云DAYU的MRS Spark组件--方法流程及注意事项
背景: 最近在测试华为云DAYU MRS Spark操作Hive的流程,因kerberos认证的问题一直测试失败. 代码示例: val sparkSession = SparkSession.buil ...
- 【概述】spark(一):spark特点、知识范畴、spark架构、任务提交流程、支持哪些运行环境
学习或者复习一门技术之前需要认识这个技术:包括这个技术的特点.架构.它是怎么运作的.它能在哪里运行等: 然后可以学习怎么使用它开放的API对一些业务场景进行开发实现: 其次对于某些特定场景我们可能使用 ...
- Spark任务提交底层原理
Driver的任务提交过程 1.Driver程序的代码运行到action操作,触发了SparkContext的runJob方法. 2.SparkContext调用DAGScheduler的runJob ...
- Spark任务执行流程
这是Spark官方给的图,大致意思就是: 四个步骤 1.构建DAG(有向无环图)(调用RDD上的方法) 2.DAGScheduler将DAG切分Stage(切分的依据是Shuffle),将Stage中 ...
- Arxiv 论文提交流程——看这篇就够了
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:刘浚嘉 | 来源:知乎 https://zhuanlan.zhihu.com/p/1094051 ...
- Spark任务提交源码
文章目录 一.向Master申请启动Driver 二.启动Driver 三.DriverWrapper向Master申请资源(给Application) 一.向Master申请启动Driver Spa ...
- Spark学习(四) -- Spark作业提交
标签(空格分隔): Spark 作业提交 先回顾一下WordCount的过程: sc.textFile("README.rd").flatMap(line => line.s ...
最新文章
- 解决【Bootstrap‘s JavaScript requires jQuery】的问题
- js 读取flask后台变量
- Google地图搜索的触角伸向月球
- .net core 调用c dll_工具:搭建Camp;C,一睹模样
- 程序设计工程师c语言,《C语言程序设计》自学百问.doc
- 【回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
- freeSHHd+puttygen搭建Sftp
- python去重txt文本_Python实现的txt文件去重功能示例
- 创客集结号:3D打印如何与中小学教育有机结合?
- 软件测试人员考核办法
- vue 直接访问静态图片_vue本地静态图片的路径问题解决方案
- QT Creator4.3制作图标
- Testin发布众测平台 助开发者发现质量缺陷建立质量体系
- 排列组合(9月8日更新
- 【CAPL】CAPL的简单介绍及变量
- linux proc 文件系统下 entry 的解释(转)
- 帅气的团队介绍HTML源码
- 以连边为中心的功能连接用于个体识别
- 计算机专业要不要考研——写的很棒
- csharp进阶练习题:Esolang口译#1 - 介绍Esolangs和我的第一个解释(MiniStringFuck)【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手