Spark DAG概述
来源:互联网 发布:淘宝上如何关闭网店 编辑:程序博客网 时间:2024/05/29 04:33
概要
DAG,有向无环图,Directed Acyclic Graph的缩写,常用于建模。Spark中使用DAG对RDD的关系进行建模,描述了RDD的依赖关系,这种关系也被称之为lineage,RDD的依赖关系使用Dependency维护,参考Spark RDD之Dependency,DAG在Spark中的对应的实现为DAGScheduler。
基础概念
介绍DAGScheduler中的一些概念,有助于理解后续流程。
名词 解释 Job 调用RDD的一个action,如count,即触发一个Job,spark中对应实现为ActiveJob,DAGScheduler中使用集合activeJobs和jobIdToActiveJob维护Job Stage 代表一个Job的DAG,会在发生shuffle处被切分,切分后每一个部分即为一个Stage,Stage实现分为ShuffleMapStage和ResultStage,一个Job切分的结果是0个或多个ShuffleMapStage加一个ResultStage Task 最终被发送到Executor执行的任务,和stage的ShuffleMapStage和ResultStage对应,其实现分为ShuffleMapTask和ResultTaskDAGScheduler作用
如上图,DAGScheduler的作用主要有
- compute DAG,执行DAG,得到stage和对应的task,通过TaskScheduler提交到集群,流程大致如下
Spark DAG之SubmitJob
Spark DAG之划分Stage
Spark DAG之SubmitStage
Spark DAG之SubmitTask - preferred locations,就近执行。
根据cache信息和RDD的preferredLocations获取preferred location。 - fault-tolerant,stage级别的容错。
shuffle结束后,reducer读取map的输出,如果读取失败,会触发DAGScheduler重新提交对应的Stage。
示例
以一段代码为例,大致介绍DAGScheduler的作用。
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(_ + _) wordcount.join(wordcount).collect()
上面代码的逻辑是,先求Wordcount,再做一个join,打印其RDD的依赖关系,如下
如上图,代码中reduceByKey处发生shuffle,共有两处,所以对应的DAG图如下
上图中stage的具体类型以及对应的task类型如下
stage 0 stage 1 stage 2 ShuffleMapStage ShuffleMapStage ResultStage ShuffleMapTask ShuffleMapTask ResultTask最后,DAGScheduler通过TaskScheduler提交ShuffleMapTask和ResultTask到Executor,完成计算。
总结
简单介绍DAGScheduler的作用,以及Stage、Task等概念,并举了一个具体例子,后续结合代码,详细介绍整个流程。
参考:
DAGScheduler
DAGScheduler — Stage-Oriented Scheduler
Spark job submission breakdown
MEMTUNE: Dynamic Memory Management for
In-memory Data Analytic Platforms
1 0
- Spark DAG概述
- Spark DAG之SubmitJob
- Spark DAG之SubmitStage
- Spark DAG之SubmitTask
- Spark DAG之划分Stage
- Spark DAG stage与 Drill DAG execution tree
- spark 概述
- Spark概述
- Spark概述
- Spark概述
- Spark概述
- Spark概述
- Spark概述
- Spark概述
- Spark概述
- spark概述
- Spark 概述
- Spark概述、Spark特点
- SSM(maven) eclipse 搭建教程(合集)
- 利用StringEscapeUtils对字符串进行各种转义与反转义(Java)
- SpringMVC ajax 请求报错:406 Not Acceptable 的解决办法 使用@ResponseBody注解
- lintcode(617)最大平均值子数组
- Camera预览尺寸和获取屏幕宽高。
- Spark DAG概述
- SpringBoot 学习记录(八): properties 属性自定义
- Giraph superstep中做的事情,以及其与BSP模型的对比
- Java常用的组件,AWT
- 只用CSS修改radio的原点样式
- C#调用PowShell执行命令的两种方式
- 遇到代理问题时自动下载MNIST数据集的Python代码
- java synchronized详解
- 回文数(Noip1999 )