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

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

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

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

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

为何会出现有partition,可是partition没数据的状况呢?get

默认的并行度是遗传的,并行度数量和partition数量是同样的,若是partition里没数据,可是partition仍是存在的。博客

例如:父RDD有100个并行度,子RDD就剩下一条数据,可是并行度仍是100个,仍是100个partition,因此只有一个paritition有数据,其余都为空,没数据,这样的状况怎么处理呢?能够压缩处理,也就是coalesce处理。it

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

Spark Streaming中为何无论有没有数据,都会产生RDD呢?模板

缘由是:若是没有了RDD,就没法生成Job,提交做业的时候有action,action是做用于RDD的,可是没有了RDD,action就没法运行了,这个时候应用程序的执行直接失败;基础

RecurringTimer.scala

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

 

本文借鉴了同窗的博客,你们喜欢的话也能够关注。

相关文章
相关标签/搜索