spark mini 0.1 分析

Spark-alpha-0.1源码解读

2018.06.03 16:45:31字数 535阅读 104

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值