Spark Streaming架构设计和运行机制 总结

Spark Streaming的本质是在Spark的RDD的基础之上加上了Timer,Timer不断的运行触发周而复始的接受数据,产生Job处理数据。

因为时间是流动的,所以加上了时间维度的话,RDD也是流动的,所谓RDD的流动,就是每隔时间间隔,都会有新的RDD实例产生,这个实例来自于DStream,RDD之间的依赖关系的模板DAG也是DStream之间的依赖关系的模板,也就是所谓的DStreamGraph。

DStream是RDD的模板,DStreamGraph是RDD DAG的模板,DStream和DStreamGraph只是这个时间间隔Batch Duration中,整个RDD产生的一部分,或者说功能的一部分而已。

Spark Streaming推出这个DStream和DStreamGraph,只是在时间维度下,方便我们管理整个RDD的生命周期的方方面面。

为什么会出现有partition,但是partition没数据的情况呢?

默认的并行度是遗传的,并行度数量和partition数量是一样的,如果partition里没数据,但是partition还是存在的。

例如:父RDD有100个并行度,子RDD就剩下一条数据,但是并行度还是100个,还是100个partition,所以只有一个paritition有数据,其他都为空,没数据,这样的情况怎么处理呢?可以压缩处理,也就是coalesce处理。

DAG是静态的,RDD生成的时候,只知道元数据,RDD里面有没有数据,在计算的时候才知道,所以RDD肯定会生成的。

Spark Streaming中为什么不管有没有数据,都会产生RDD呢?

原因是:如果没有了RDD,就无法生成Job,提交作业的时候有action,action是作用于RDD的,但是没有了RDD,action就无法运行了,这个时候应用程序的执行直接失败;

RecurringTimer.scala

Spark Streaming是一直不断的循环,不管有没有数据,有没有任务,也不关心时间间隔,会一直循环,整个引擎是无时无刻不在执行,不管有用没用,不管,一直执行,也就是死循环。

 

本文借鉴了同学的博客,大家喜欢的话也可以关注。

 

转载于:https://my.oschina.net/corleone/blog/688302

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值