(版本定制)第10课:Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(版本定制)第10课:Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考相关的知识,希望对你有一定的参考价值。

本期内容:

    1、数据接收架构设计模式

    2、数据接收源码彻底研究


1、Receiver接受数据的过程类似于MVC模式:

Receiver,ReceiverSupervisor和Driver的关系相当于Model,Control,View,也就是MVC。

Model就是Receiver,存储数据Control,就是ReceiverSupervisor,Driver是获得元数据,也就是View。

技术分享

2、数据的位置信息会被封装到RDD里面。

3、Receiver接受数据,交给ReceiverSupervisor去存储数据。

4、ReceiverTracker是通过发送一个又一个的Job,每个Job只有一个Task,每个Task里面就只有一个ReceiverSupervisor,用这个函数启动每一个Receiver。


下面我们简单的看下Receiver启动流程,应用程序首先通过JobScheduler的start方法来启动receiverTracker的start方法:

def start(): Unit = synchronized {
if (eventLoop != null) return // scheduler has already been started

logDebug("Starting JobScheduler")
eventLoop = new EventLoop[JobSchedulerEvent]("JobScheduler") {
override protected def onReceive(event: JobSchedulerEvent): Unit = processEvent(event)

override protected def onError(e: Throwable): Unit = reportError("Error in job scheduler", e)
 }
eventLoop.start()

// attach rate controllers of input streams to receive batch completion updates
for {
   inputDStream <- ssc.graph.getInputStreams
   rateController <- inputDStream.rateController
} ssc.addStreamingListener(rateController)

listenerBus.start(ssc.sparkContext)
receiverTracker = new ReceiverTracker(ssc)
inputInfoTracker = new InputInfoTracker(ssc)
receiverTracker.start()
//receiver启动
jobGenerator.start()
 logInfo(
"Started JobScheduler")
}

通过调用receiverTracker.start()方法来进行一系列的操作:

/** Start the endpoint and receiver execution thread. */
def start(): Unit = synchronized {
if (isTrackerStarted) {
throw new SparkException("ReceiverTracker already started")
 }

if (!receiverInputStreams.isEmpty) {
endpoint = ssc.env.rpcEnv.setupEndpoint(
"ReceiverTracker", new ReceiverTrackerEndpoint(ssc.env.rpcEnv))
//Rpc消息通信,获取receiver的状态
if (!skipReceiverLaunch) launchReceivers() //启动receiver
   logInfo(
"ReceiverTracker started")
trackerState = Started
}
}

下面通过画图简单的描述下Receiver启动的内部机制:

技术分享


参考博客:http://blog.csdn.net/hanburgud/article/details/51471047

                 http://lqding.blog.51cto.com/9123978/1774426


备注:

资料来源于:DT_大数据梦工厂(Spark发行版本定制)

更多私密内容,请关注微信公众号:DT_Spark

如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上2000开设的Spark永久免费公开课,地址YY房间号:68917580


本文出自 “DT_Spark大数据梦工厂” 博客,请务必保留此出处http://18610086859.blog.51cto.com/11484530/1775831

以上是关于(版本定制)第10课:Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考的主要内容,如果未能解决你的问题,请参考以下文章

(版本定制)第12课:Spark Streaming源码解读之Executor容错安全性

(版本定制)第16课:Spark Streaming源码解读之数据清理内幕彻底解密

(版本定制)第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

(版本定制)第11课:Spark Streaming源码解读之Driver中的ReceiverTracker彻底研究和思考

(版本定制)第17课:Spark Streaming资源动态申请和动态控制消费速率原理剖析

(版本定制)第15课:Spark Streaming源码解读之No Receivers彻底思考