Spark Streaming揭秘 Day24

Transformation和action图解

今天我们进入SparkStreaming的数据处理,谈一下两个重要的操作Transfromation和action背后的故事。

InputReceiver

根据前面的课程,我们知道Transformation是逻辑级别的状态转换,并没有真的发生。
让我们从第一个Transformation,也就是SocketTextStream开始。

这里需要注意的是,这里返回的是字符串类型,这个是通过converter也就是byteToLine方法来实现的。
Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

进入父类,也就是SocketInputDStream。
其中关键对象是SocketReceiver,其中比较关键的是调用了hasNext方法,这里用到了一个命令模式,具体会指向socketTextStreamin传入的byteToLine方法生成。
Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

在伴生对象中我们看到了byteToLine的实现,具体实现了一个命令。
Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

此外,onStop方法为空,没有清空资源,因为在receive方法中已经进行了处理,如果当停止时会中断。
Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

进入到SocketReceiver的父类Receiver

其中的关键方法是restart,它会告诉supervisor去重新启动,并用了一个future对象实现了异步调用。

Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

InputDStream

下面让我们转入DStream。

首先看下,ReceiverInputDStream,关键方法是compute,输入流以时间为单位计算产生RDD,也说明了ReceiverInputDStream的实例对象是在Driver中的。

Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

进入父类InputDStream。

这里有一个关键代码,将inputDStream添加至DStreamGraph中。
Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

DStreamGraph

DStreamGraph是作为整个DStream处理的枢纽存在。包含所有的输入和输出。
Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

outputStreams的作用是应用程序可能包含多个action,那么每个action会对应一个outputStream,同时每个outputStream生成一个Job。
outputStreams都是通过DStream的register方法来生成的。
Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

自此,基本对Transformation和action中设计的对象进行了一下遍历。

小结

下面开始绘图,从两个基本数据结构inputStreams和outputStreams出发,在继承结构中表现的数据结构存储大家要注意。

Spark Streaming揭秘 Day24 Transformation和action图解-LMLPHP

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

05-07 15:37