Spark描述DAG的2种Task类型解析
2016-12-30 16:31
288 查看
Spark有2个类型的Task: ShuffleMapTask和ResultTask;
设想有: Stage1 ----shuffle--------> Stage2 -----shuffle------> Stage3
Stage3就是一个ResultTask, 因为是最终的action的执行;
Stage2既是1个shuffle的数据读取者, 又是1个shuffle的数据输出者, 需要考虑如何在一个task的类型中同时兼具上述两种角色;
Spark的设计非常巧妙.
Spark将对shuffle的数据读取封装到RDD中, 对于上层来说,只要调用rdd.iterator就可以拿到该RDD的iterator对象,然后调用iterator就
可以拿到RDD中的数据, 具体这个数据存储在哪里, 完全又不同的RDD的实现决定. 这样其实使用通用的代码,就可以读取所有RDD
的数据, 不管这个RDD是否是ShuffleRDD,还是HadoopRDD. 所以从shuffle读取数据就不需要上层特殊处理了.
这样, 上层只要关心, 处于不同的stage阶段, 相应的stage应该处理什么,就可以写出相应的代码.
ShuffleMapTask的处理代码
ResultTask的处理代码
从上面代码可以看出,从rdd读取数据都是一样的;不同的是,
shuffleMapTask需要将数据写入磁盘作为shuffle的文件,而ResultTask,会调用
action的实际处理函数,对读出的数据进行处理.
设想有: Stage1 ----shuffle--------> Stage2 -----shuffle------> Stage3
Stage3就是一个ResultTask, 因为是最终的action的执行;
Stage2既是1个shuffle的数据读取者, 又是1个shuffle的数据输出者, 需要考虑如何在一个task的类型中同时兼具上述两种角色;
Spark的设计非常巧妙.
Spark将对shuffle的数据读取封装到RDD中, 对于上层来说,只要调用rdd.iterator就可以拿到该RDD的iterator对象,然后调用iterator就
可以拿到RDD中的数据, 具体这个数据存储在哪里, 完全又不同的RDD的实现决定. 这样其实使用通用的代码,就可以读取所有RDD
的数据, 不管这个RDD是否是ShuffleRDD,还是HadoopRDD. 所以从shuffle读取数据就不需要上层特殊处理了.
这样, 上层只要关心, 处于不同的stage阶段, 相应的stage应该处理什么,就可以写出相应的代码.
ShuffleMapTask的处理代码
ResultTask的处理代码
从上面代码可以看出,从rdd读取数据都是一样的;不同的是,
shuffleMapTask需要将数据写入磁盘作为shuffle的文件,而ResultTask,会调用
action的实际处理函数,对读出的数据进行处理.
相关文章推荐
- 两种类型的Spark RDD task解析以及iterator解析 -- (视频笔记)
- Spark技术内幕: Task向Executor提交的源码解析
- 第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析学习笔记
- Spark DAG之SubmitTask
- Spark2.2 Task原理分析及源码解析
- Spark2.2-Task序列化源码解析
- Spark技术内幕: Task向Executor提交的源码解析
- Spark 源码解析:彻底理解TaskScheduler的任务提交和task最佳位置算法
- Spark 源码解析:TaskScheduler的任务提交和task最佳位置算法
- Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-34
- Spark DAGScheduler 功能及源码解析
- Scala深入浅出进阶经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析
- Spark的 DAGschedule & task schedule 区别以及相互联系
- 第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析
- Scala深入浅出进阶经典 第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- scala-43:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- 43.Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析
- Spark 源码解析 : DAGScheduler中的DAG划分与提交
- spark 2.1 DAGScheduler.handleTaskCompletion