Spark 解析 : DAGScheduler中的DAG划分与提交
一:Spark 运行架构图片
二:Spark 运行架构
各个RDD之间存在着依赖关系,这些依赖关系形成有向无环图DAG,DAGScheduler对这些依赖关系形成的DAG,进行Stage划分,划分的规则很简单,从后往前回溯,遇到窄依赖加入本stage,遇见宽依赖进行Stage切分。完成了Stage的划分,DAGScheduler基于每个Stage生成TaskSet,并将TaskSet提交给TaskScheduler。TaskScheduler 负责具体的task调度,在Worker节点上启动task。
三:解析DAGScheduler中的DAG划分与提交
1.DAGScheduler的建立
用户提交编写的sparkcontext时就创建了DAGScheduler和TaskScheduler。
2.job提交
job产生发生在RDD执行动作时,这个动作运行方法runjob,来监听job的运行情况。DAGSheduler通过内部的方法submitJob来提交,但此时的提交只是job最终提交的一小步。此时提交job并生成jobid,将job放入队列中,由DAGSheduler中的方法来依次处理。最后的提交是送给了DAGScheduler.handleJobSubmitted,这个方法会进行处理job并进行阶段划分。
3.stage划分
stage的划分是从最后往前逆推的,依宽依赖作为划分的准则,遇到宽依赖就划分出一个stage,遇到窄依赖就压入栈中。从stage到父stage以及从RDD找出依赖,均是从最后执行动作的RDD,根据依赖信息往前探寻,为了避免重复访问或者说重复运算,将访问过的RDD存入Hashset中。递归调用方法getparentStage来不断划分stage,每次划分阶段都会生成一个stageid,因为递归调用所以命名的id越往前越小,也就是说从后面先划分的stageid是最大的,越小的阶段之后提交后先被运算。以这样的步骤划分阶段,直到阶段宽依赖划分完毕或者第一个RDD被访问完成。
经过以上三个步骤,DAGScheduler将包含一组task的stage提交给TaskScheduler,当然之后还涉及到org.apache.spark.scheduler.SchedulerBackend进行资源分配等。
四:作用
DAGScheduler的job调度的核心入口
*
- stage划分算法非常重要:
- 必须要对stage算法很清晰,直到你自己编写的spark application被划分为了几个job,
- 每个job被划分为了几个stage,每个stage包含了你那些代码,只有知道了每个stage包括了
- 你那些代码之后,在线上,如果你发现某一个stage执行特别慢,或者是某一个stage一直报错
- 你才能针对哪个stage对应的代码,去排查问题,或者说是性能调优
- stage划分算法总结:
- 1、从finalStage倒推
- 2、通过宽依赖,来进行新的stage的划分
- 3、使用递归,优先提交父stage
Spark 解析 : DAGScheduler中的DAG划分与提交相关推荐
- Spark作业调度中stage的划分
目录 (1)Spark作业调度 (2)RDD依赖关系 (3)Stage的划分 Spark在接收到提交的作业后,会进行RDD依赖分析并划分成多个stage,以stage为单位生成taskset并提交调度 ...
- Spark中的DAG介绍
目录 1 DAG的介绍 2 Spark中的DAG 3 DAG解决的问题 4 DAG是怎么工作 4.1 工作流程 4.2 注意点 1 DAG的介绍 DAG:全称为 Directed Acyclic Gr ...
- Spark技术内幕:Stage划分及提交源码分析
当触发一个RDD的action后,以count为例,调用关系如下: org.apache.spark.rdd.RDD#count org.apache.spark.SparkContext#runJo ...
- Spark 的核心 RDD 以及 Stage 划分细节,运行模式总结
精选30+云产品,助力企业轻松上云!>>> 阅读文本大概需要 5 分钟. 以下内容,部分参考网络资料,也有自己的理解, 图片 99% 为自己制作.如有错误,欢迎留言指出,一起交流. ...
- spark解析csv文件_Spark:解析CSV文件并按列值分组
spark解析csv文件 我发现自己经常使用大型CSV文件,并且意识到我现有的工具集不能让我快速浏览它们,我以为我会花一些时间在Spark上看看是否有帮助. 我正在使用芝加哥市发布的犯罪数据集 :它的 ...
- 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C
在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种. (16)A.数据流和事务流 B.变换流和数据流 C.变换流和事务流 D.控制流和事务流 数据流的类型决定映射的方法.数据流有 ...
- 外部数据源 之 Plugin 可插拔的方式整合到Spark中/Spark源码中
一:概念理解 Plugin 可插拔的方式整合到Spark中/Spark源码中 为了在用外部数据源读取文件的时候,本来读取是valui 使他变成一个带schema的df 有具体的信息 外部数据源就是把很 ...
- spark的RDD中的action(执行)和transformation(转换)两种操作中常见函数介绍
参考文章:spark的RDD中的action(执行)和transformation(转换)两种操作中常见函数介绍 spark常见的RDD 1. 函数概览 2. 常见的Transformations 操 ...
- spark日志存储路径为mysql_利用Spark解析Tomcat日志,并将统计结果存入Mysql数据库...
本文试图实现的需求场景为:以学习Spark知识点为目的,编写Scala利用Spark解析800M的tomcat日志文件,打印一段时间内ERROR级别记录的前10行,统计每分钟的日志记录数,并将统计结果 ...
最新文章
- 记录下openstack部署和使用时遇到的一些问题
- 利用python进行识别相似图片(二)
- 通过调用门进行控制转移 ——《x86汇编语言:从实模式到保护模式》读书笔记29
- 汇编语言出现的历史背景
- 线程池及并发编程基础总结
- 不要拿ERP的报表忽悠领导!——一个报表引发的企业经营反思
- LinuxC语言のUDP简易聊天室 sokcet
- 网贷查询接口开发 网贷黑名单查询 个人网贷黑名单查询
- Node.js Web 模块(客户端 服务端实例)
- alibaba的json包的数据转换
- 日光山谷的秋天景色。
- 两全险的主险是什么意思?
- 彻底了解 suid, sgid ,sticky权限
- 随机森林实现及调参的R与Python对比——以泰坦尼克幸存者数据为例
- 谈谈技术人的英语学习
- 手把手教你编写一个音乐播放器
- Linux科普扫盲系列(Linux启动安装U盘的制作)
- 计算机网络个人项目设计:java实现,基于Jnetpcap的网络嗅探抓取,发送数据包单机程序(模仿wireshark)
- python拉格朗日插值法_Python实现的拉格朗日插值法示例
- 电子商务杨煜:利用IM工具进行产品营销活动设计