美文网首页
Spark-alpha-0.1源码解读

Spark-alpha-0.1源码解读

作者: 红袖者 | 来源:发表于2018-06-03 16:45 被阅读0次

Spark 0.1是spark开源的第一个版本,本文主要从组成类、如何触发执行、如何具体执行这几个方面进行分析。

主要组成类:

1.RDD,其中RDD主要包含两种类型的函数,一种供用户使用的算子,如map、reduce等;一种是任务真正执行时需要的函数,如split、iterator等;


RDD

2.Scheduler,调度器用来提交、终止生成的task任务;


Scheduler.png
3.Task,具体任务的执行逻辑被封装到一个线程中,提交给Executor执行;
Task.png
执行过程

举个简单的例子,其代码如下,然后我们对其执行逻辑进行分析,总结如下:生成RDD->行动操作触发RDD生成Tasks->通过scheduler提交Tasks给executor去真正执行;

val inputRDD = new HdfsTextFile("")
val res = inputRDD.map(f1).reduce(f2);

1.从hdfs获取外部输入时,生成inputRDD,此RDD包含了文件路径和sparkContext;

HDFS输入

2.inputRDD调用map(f1)函数时,生成了MappedRDD,该rdd中包含前一个rdd,其splits为前一个rdd的splits;

生成MappedRDD

3.mappedRDD调用reduce(f2)操作时,会先对func进行闭包清除,接着splits.map(s => new ReduceTask(this, s, f))生成tasks;其中splits递归调用最终返回的splits是inputRDD对应的splits,然后将此rdd、闭包函数和一个inputSplit封装成一个reduceTask;

Reduce操作触发任务执行

4.封装的reduceTask其运行逻辑如下,rdd通过递归调用iterator(split)函数,最终inputRDD会先执行其map(f)函数,返回结果后回到上一层的子RDD中,子RDD再调用map(f)函数.......返回到当前RDD时获取了一个inputSplit的linear流水处理结果(针对每一行),即前面的map(f)操作都执行完了,最后根据func的逻辑对前面的结果进行reduce聚合,获取一个reduceTask的计算结果;

ReduceTask的执行逻辑

5.rdd的reduce函数中再对多个reduceTask的返回结果,根据func逻辑进行聚合,最后获取怎个rdd的reduce结果;

6.reduce()利用sparkContext、sparkContext再利用scheduler、scheduler最后利用executor来真正执行tasks;

相关文章

网友评论

      本文标题:Spark-alpha-0.1源码解读

      本文链接:https://www.haomeiwen.com/subject/blejsftx.html