首页 > 代码库 > Spark任务流程笔记
Spark任务流程笔记
Spark学习笔记总结
02. Spark任务流程
1. RDD的依赖关系
RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)
- 窄依赖
窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用
总结:窄依赖我们形象的比喻为独生子女 - 宽依赖
宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition
总结:窄依赖我们形象的比喻为超生(多个子女)
查看RDD依赖关系:
整个树形结构:rdd.toDebugString
本身:rdd.dependencies
2. DAG的生成
DAG,有向无环图,原始的RDD通过一系列的转换就就形成了DAG,根据RDD之间的依赖关系的不同将DAG划分成不同的Stage,对于窄依赖,partition的转换处理在Stage中完成计算。对于宽依赖,由于有Shuffle的存在,只能在parent RDD处理完成后,才能开始接下来的计算,因此宽依赖是划分Stage的依据。
3. Spark任务执行流程
大致分为4步:
- 根据算子生成DAG
- 将DAG根据宽依赖切分成任务集合的stages
- Driver将具体任务分发给Worker
- Worker中的executor执行任务
- DAGScheduler和TaskScheduler都在Driver中
4. wordcount执行流程
1. wc示例代码
//textFile会产生两个RDD: 1. HadoopRDD -> MapPartitionsRDD
sc.textFile(INPUT_PATH)
//flatMap产生1个RDD:MapPartitionsRDD
.flatMap { _.split(" ") }
//map产生1个RDD:MapPartitionsRDD
.map { (_, 1) }
//reduceByKey产生了:ShuffledRDD
.reduceByKey(_ + _)
//暂时不管
.sortBy(_._2, false)
//saveAsTextFile产生1个RDD:MapPartitionsRDD
.saveAsTextFile(OUTPUT_PATH)
一共产生了6个RDD
2. 执行流程-切分stage
执行流程:
- 根据宽依赖划分成了两个stage,后面一个stage需要等待前一个计算完成
- 第一个stage中的taskSet包含了3个task
- 一个task就是一个流水线pipelining,可以与其他task并行执行,在这里,任务内容是相同的,只是数据不同。
初接触,记下学习笔记,还有很多问题,望指导,谢谢。
Spark任务流程笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。