Spark Streaming揭秘 Day23 启动关闭源码图解

Spark Streaming揭秘 Day23

启动关闭源码图解

今天主要分析一下SparkStreaming的启动和关闭过程。

从Demo程序出发,主要聚焦在两段代码:

启动代码:
Snip20160609_7

关闭代码:
Snip20160609_6

启动过程

StreamingContext是对SparkContext的封装,是个装饰器模式,相当于给SparkCore化妆。

Snip20160609_9

其中最关键的参数是Batch Duration,Driver和Executor上的两个定时器都是基于这个参数。

在构造时创建的关键对象如下:

  1. DStreamGraph,DStream依赖关系构成的有向无环图,rememberDuration可以设置数据存活步长,不太直接使用。
  2. JobScheduler,作业生成之后调度到集群的关键对象。
  3. ContextWaiter,关闭程序时很重要。
  4. progressListener,StreamingJobProcessListener,提供了处理各个进度时点的回调接口,是进行功能定制时主要使用到的。
  5. uiTab,StreamingTab,提供UI的生成。

运行过程

以Demo代码为例,socketTextStream中,会把字节数据变成一行一行的数据。
Snip20160609_8

深入进去,我们会发现这个代码并没有在此时执行,而是在后续时使用getNext方法来获取。

Snip20160609_14

关闭过程

如下为关闭方法,可以指定超时时间,超过之后会获得停止。
Snip20160609_10

具体关闭是一个等待的过程,当中使用到了两个控制变量,如果没有停止或者错误信号,就会一直循环等待。
Snip20160609_13

所以,对应有两个两种notify方式用来停止处理,分别对应stop和error情况。
Snip20160609_12

小结

最后,我们将启动和关闭的过程用一个状态机来描述一下:
IMF-23

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

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

原文地址:https://www.cnblogs.com/dt-zhw/p/5572806.html