5. 基于案例一节课贯通Spark Streaming流计算框架的运行源码

在Spark Streaming程序的入口,我们都会定义一个batchDuration,就是需要每隔多长时间就按照DStreamGraph来动态生成一个RDD DAG实例。在Spark Streaming里,总体负责动态作业调度的具体类是JobScheduler,在Spark Streaming程序开始运行的时候,会生成一个JobScheduler的实例,并调用start()运行起来。

跟踪进入JobScheduler的start()方法体,可观察到JobScheduler有两个非常重要的成员:JobGenerator和ReceiverTracker。

JobScheduler将每个batch的RDD DAG具体生成工作委托给JobGenerator,而将输入数据的记录工作委托给ReceiverTracker

JobGenerator这个类生成DStreams的job,以及Drivers的检查点和清洗DStream metaData.有JobGenerator的start()方法可知当第一次生成job时必先调用startFirstTime()。

processEvent(event)是产生job、metaData、checkpoint的主要来源,其源码如下所示:


5. 基于案例一节课贯通Spark Streaming流计算框架的运行源码_第1张图片


每次 RDD DAG 实际生成包含 5 个步骤:

(1)要求 ReceiverTracker 将目前已收到的数据进行一次 allocate,即将上次 batch 切分后的数据切分到到本次新的 batch 里;

(2)要求 DStreamGraph 复制出一套新的 RDD DAG 的实例,具体过程是:DStreamGraph 将要求图里的尾 DStream 节点生成具体的 RDD 实例,并递归的调用尾 DStream 的上游 DStream 节点……以此遍历整个 DStreamGraph,遍历结束也就正好生成了 RDD DAG 的实例;

(3)获取第 1 步 ReceiverTracker 分配到本 batch 的源头数据的 meta 信息;

(4) 将第 2 步生成的本 batch 的 RDD DAG,和第 3 步获取到的 meta 信息,一同提交给 JobScheduler 异步执行;

(5) 只要提交结束(不管是否已开始异步执行),就马上对整个系统的当前运行状态做一个 checkpoint。2.3 模块 3:数据产生与导入DStream有一个重要而特殊的子类ReceiverInputDStream:它出来像其它DStream那样在batch里实例化RDD以外,还需要额外的Receiver为这个RDD产生数据!


资料来源于:

DT_大数据梦工厂(Spark发行版本定制)微信公众号:DT_Spark

新浪微博:http://www.weibo.com/ilovepains

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

微信公众号

你可能感兴趣的:(5. 基于案例一节课贯通Spark Streaming流计算框架的运行源码)