一: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划分与提交相关推荐

  1. Spark作业调度中stage的划分

    目录 (1)Spark作业调度 (2)RDD依赖关系 (3)Stage的划分 Spark在接收到提交的作业后,会进行RDD依赖分析并划分成多个stage,以stage为单位生成taskset并提交调度 ...

  2. Spark中的DAG介绍

    目录 1 DAG的介绍 2 Spark中的DAG 3 DAG解决的问题 4 DAG是怎么工作 4.1 工作流程 4.2 注意点 1 DAG的介绍 DAG:全称为 Directed Acyclic Gr ...

  3. Spark技术内幕:Stage划分及提交源码分析

    当触发一个RDD的action后,以count为例,调用关系如下: org.apache.spark.rdd.RDD#count org.apache.spark.SparkContext#runJo ...

  4. Spark 的核心 RDD 以及 Stage 划分细节,运行模式总结

    精选30+云产品,助力企业轻松上云!>>> 阅读文本大概需要 5 分钟. 以下内容,部分参考网络资料,也有自己的理解, 图片 99% 为自己制作.如有错误,欢迎留言指出,一起交流. ...

  5. spark解析csv文件_Spark:解析CSV文件并按列值分组

    spark解析csv文件 我发现自己经常使用大型CSV文件,并且意识到我现有的工具集不能让我快速浏览它们,我以为我会花一些时间在Spark上看看是否有帮助. 我正在使用芝加哥市发布的犯罪数据集 :它的 ...

  6. 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C

    在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种. (16)A.数据流和事务流 B.变换流和数据流 C.变换流和事务流 D.控制流和事务流 数据流的类型决定映射的方法.数据流有 ...

  7. 外部数据源 之 Plugin 可插拔的方式整合到Spark中/Spark源码中

    一:概念理解 Plugin 可插拔的方式整合到Spark中/Spark源码中 为了在用外部数据源读取文件的时候,本来读取是valui 使他变成一个带schema的df 有具体的信息 外部数据源就是把很 ...

  8. spark的RDD中的action(执行)和transformation(转换)两种操作中常见函数介绍

    参考文章:spark的RDD中的action(执行)和transformation(转换)两种操作中常见函数介绍 spark常见的RDD 1. 函数概览 2. 常见的Transformations 操 ...

  9. spark日志存储路径为mysql_利用Spark解析Tomcat日志,并将统计结果存入Mysql数据库...

    本文试图实现的需求场景为:以学习Spark知识点为目的,编写Scala利用Spark解析800M的tomcat日志文件,打印一段时间内ERROR级别记录的前10行,统计每分钟的日志记录数,并将统计结果 ...

最新文章

  1. 记录下openstack部署和使用时遇到的一些问题
  2. 利用python进行识别相似图片(二)
  3. 通过调用门进行控制转移 ——《x86汇编语言:从实模式到保护模式》读书笔记29
  4. 汇编语言出现的历史背景
  5. 线程池及并发编程基础总结
  6. 不要拿ERP的报表忽悠领导!——一个报表引发的企业经营反思
  7. LinuxC语言のUDP简易聊天室 sokcet
  8. 网贷查询接口开发 网贷黑名单查询 个人网贷黑名单查询
  9. Node.js Web 模块(客户端 服务端实例)
  10. alibaba的json包的数据转换
  11. 日光山谷的秋天景色。
  12. 两全险的主险是什么意思?
  13. 彻底了解 suid, sgid ,sticky权限
  14. 随机森林实现及调参的R与Python对比——以泰坦尼克幸存者数据为例
  15. 谈谈技术人的英语学习
  16. 手把手教你编写一个音乐播放器
  17. Linux科普扫盲系列(Linux启动安装U盘的制作)
  18. 计算机网络个人项目设计:java实现,基于Jnetpcap的网络嗅探抓取,发送数据包单机程序(模仿wireshark)
  19. python拉格朗日插值法_Python实现的拉格朗日插值法示例
  20. 电子商务杨煜:利用IM工具进行产品营销活动设计

热门文章

  1. PCL——向PCD文件写入点云数据
  2. C# 计时工具 Stopwatch
  3. 读取Excel任务列表并显示在Outlook日历上
  4. MySQL MHA切换失败一例
  5. SQL语句关于数据库安全性
  6. CentOS 5/6下安装Axel插件加速yum下载
  7. php任意地方关闭弹窗,vue和jq中实现点击任意地方关闭弹窗
  8. Java获得不同格式的系统时间
  9. mysql 报错注入输出多个字段_SQL注入浅析
  10. Ubuntu18.04安装ROS Melodic(解决网络原因,先将所需压缩包下载到本地,然后rosdep update)