Spark DAG之划分Stage
来源:互联网 发布:sqlserver exists in 编辑:程序博客网 时间:2024/06/06 04:08
概要
介绍Stage的定义,DAGScheduler划分Stage流程。
Stage
查看Stage定义
Stage中有两个重要属性,rdd和parents,分别记录的是切分处的RDD和父Stage信息,这一点结合我后面的例子更好理解。Stage有两个子类,ShuffleMapStage、ResultStage,两者分别增加了一个重要属性信息,如下
处理JobSubmitted事件
上一篇博客Spark DAG之SubmitJob最后讲到调用DAGScheduler的handleJobSubmitted方法处理JobSubmitted事件,查看该方法
如上图注释处,handleJobSubmitted方法主要职责如下
- 调用newResultStage方法,划分DAG生成Stage。
- 创建ActiveJob,并添加到对应集合管理。
- 调用submitStage、submitWaitingStages提交Stage。
划分Stage
DAGScheduler的newResultStage方法负责划分DAG生成Stage,newResultStage方法依次调用getParentStagesAndId、getParentStages方法,查看getParentStages方法
如上图注释处,会在shuffle处切分DAG,并且getShuffleMapStage方法会递归切分shufDep.rdd,getShuffleMapStage方法涉及到的方法调用过多,限于篇幅不再介绍。
举个例子
通过一个例子,详细分析整个划分DAG流程。下面代码是Wordcount的变形,这么处理是为了让代码简单的同时,Stage也足够丰富。
val sc = new SparkContext("local","wordcount") val data = sc.parallelize(List("a c", "a b", "b c", "b d", "c d"), 2) val wordcount = data.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).map(x => (x._2, x._1)).reduceByKey(_ + _) val data2 = sc.parallelize(List("a c", "a b", "b c", "b d", "c d"), 2) val wordcount2 = data2.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).map(x => (x._2, x._1)).reduceByKey(_ + _) wordcount.join(wordcount2).collect()
打印出上述代码中RDD的依赖关系
整理如下
- 最左一列的parallelize、map等表示实例代码中的transformation。
- 圆角矩形表示transformation操作生成的RDD和该RDD的Dependency,其中ShuffleDependency使用蓝色标注。
在上图ShuffleDependency处切分DAG生成Stage,结果如下
- 圆角矩形代表Stage,结果为四个ShuffleMapStage ,一个ResultStage。
- 圆角矩形内为Stage的两个属性。ShuffleMapStage和ResultStage有差别。
到这里,Stage就划分完成了,最后贴张spark webUI的图片
总结
介绍了Stage的结构和实现类,举了一个例子,从物理结构上介绍了Stage的划分,以及划分后的Stage保存了哪些重要信息,了解这些是后续分析根据Stage生成Task的前提。
- Spark DAG之划分Stage
- Spark源码分析之三:Stage划分
- Spark Stage 的划分
- spark如何划分stage
- Spark Stage的划分
- Spark学习之7:Job触发及Stage划分
- Spark 之 Stage划分、数据本地性算法实现
- Spark源码解读之Stage划分和提交
- spark源码之Job执行(1)stage划分与提交
- spark源码之Job执行(1)stage划分与提交
- Spark源码分析之DAGScheduler以及stage的划分
- spark 中如何划分stage?
- spark中Stage的划分
- Spark DAG stage与 Drill DAG execution tree
- Spark修炼之道(高级篇)——Spark源码阅读:第四节 Stage划分
- [Spark源码剖析] DAGScheduler划分stage
- Spark进阶学习——Stage划分
- spark stage的划分和task分配
- HTML5新增元素及属性
- bzoj1572[Usaco2009 Open]工作安排Job 堆
- Java多态中的引用类型转换
- File/IO
- EXP-00026: conflicting modes specified
- Spark DAG之划分Stage
- Eclipse+Maven工程异常:Plugin execution not covered by lifecycle configuration
- 一、Elevator
- Java Comparable接口的使用与自定义实现
- Vue-cli 中为单独页面设置背景色的方法
- 数组之求无序数组中的min和max
- [cocos2dx]Cocos2d-x在win7下android环境搭建
- 百度富文本编辑器 UEditor 1.4.3 getContent会报错:Uncaught TypeError
- 判断字符串是否回文