DT大数据梦工厂Spark定制班笔记(005)

Spark Streaming Job运行流程图


所有代码分析均基于Apache Spark1.6.1

Spark Streaming初始化

Spark Streaming初始化的时候,会初始化一系列对下如SparkContext, DStreamGraph和JobScheduler等。

具体代码可以参照StreamingContext.scala (136-183行)。


JobScheduler在初始化过程中,会初始化JobGenerator和StreamingListenerBus。

代码如下,分别为JobScheduler.scala 53行,55行。

private val jobGenerator = new JobGenerator(this) 
val listenerBus = new StreamingListenerBus(ssc.sparkContext.listenerBus)

其中JobGenerator在初始化过程中会初始化RecurringTimer对象(JobGenerator.scala 60-61行)。

private val timer = new RecurringTimer(clock, ssc.graph.batchDuration.milliseconds,
  longTime => eventLoop.post(GenerateJobs(new Time(longTime))), "JobGenerator")

该对象会定时向EventLoop发送GenerateJobs。


设置InputStream

ssc.socketTextStream()

socketTextStream的定义如下(StreamingContext 297行)

def socketTextStream(
    hostname: String,
    port: Int,
    storageLevel: StorageLevel = StorageLevel.MEMORY_AND_DISK_SER_2
  ): ReceiverInputDStream[String] = withNamedScope("socket text stream") {
  socketStream[String](hostname, port, SocketReceiver.bytesToLines, storageLevel)
}
其返回类型为ReceiverInputDStream,内部调用socketStream。

def socketStream[T: ClassTag](
    hostname: String,
    port: Int,
    converter: (InputStream) => Iterator[T],
    storageLevel: StorageLevel
  ): ReceiverInputDStream[T] = {
  new SocketInputDStream[T](this, hostname, port, converter, storageLevel)
}

SocketInPutDStream的继承关系如下:

SocketInputDStream -> ReceiverInputDStream -> InputDStream -> DStream


其中InputDStream在初始化过程中会执行如下操作 InputDStream.scala (47行)

ssc.graph.addInputStream(this)
将SocketINputDStream实例加入到DStreamGraph数据结构inputStreams中

调用Print操作

最终会将输出流加入到DStreamGraph的outputStreams中

代码分析稍后奉上。


Streaming Job启动

Streamming Job启动后,会通过JobScheduler相继启动receiverTracker和jobGenerator


发布了12 篇原创文章 · 获赞 0 · 访问量 3051
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览