天天看点

Spark Streaming:RDD,Batch, Dstream, Partitiion到底是什么一个batch里只有一个RDD

https://spark.apache.org/docs/2.2.0/streaming-programming-guide.html

其实spark doc写的挺好,我这就把他概括一下,写一些让我迷惑的问题点:

RDD:RDD就算是spark里最基本的处理单位,算是spark定义的一种数据结构(是分布式的)-------她是Immutable的,一旦生成了,就不能改

其实想想也能明白为啥RDD不能修改:处理器之间共享方便:也安全一些,不至于各个core的一个RDD不同步,等等等等

经典的图来了

Spark Streaming:RDD,Batch, Dstream, Partitiion到底是什么一个batch里只有一个RDD

input data 就是输入了, 不停的发啊发啊发啊,,,,,,

第一步: 切成batch

然后Streaming engine就会用一个batch来收集数据,凑够一个batch了就发走了(batch的大小是时间大小), 问题又来了

那batch里是啥?

block

batch里也不会直接是数据,batch会有block(熟悉把,就是那个64m的block),block内会接受数据流,当一个block存满了,就去存下一个block,直到batch时间到了。

block的大小(怕我忘了: conf:spark.streaming.blockInterval )

RDD

然后这个batch(里面有一些block)就会发送到Spark Engine 生成RDD, 而里面的block就变成的RDD的partition。

所以:

一个batch里只有一个RDD

Dstream就简单了,就把他 想象成一堆连续的RDD就行, 没啥特别的

RDD = ( 一堆partitions 组成)

Batch = (一堆block组成)

(一堆block) ------->经过spark engine------->(一堆partitions,生成RDD)

所以要是说Batch和RDD是一个东西好像也不太对,可能就是进化关系把。。。

所以Spark Streaming里最基本的划分是从batch来划分流生成RDD,所以如果你打算生成window, window必须要是batch interval的整数倍(数据是这么切的啊。。。)