您的位置:首页 > 其它

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的实际处理函数,对读出的数据进行处理.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark shuffle DAG 源码