SparkStreaming从入门到放弃(四)

从job角度看sparkStreaming

回顾前文,JobGenerator 维护了一个定时器,周期就是我们刚刚提到的 batchDuration,定时为每个 batch 生成 RDD DAG 的实例,DStreamGraph.generateJobs(time) 将返回一个 Seq[Job],其中的每个 Job 是一个 ForEachDStream 实例的 generateJob(time) 返回的结果JobScheduler 收到 jobSet处理逻辑是 job => jobExecutor.execute(new JobHandler(job))然后是run();

Spark Streaming 里也有一个 Job,但此 Job 非彼 JobSpark Streaming 里的 Job 更像是个 Java 里的 Runnable,可以 run() 一个自定义的 func .

回到JobGenerator启动,ssc.start()启动后,会JobGenerator.start(),会先判断是否存在checkpoints,否则会先重启。

JobGenerator 维护了一个定时器,会定时发送消息,导致结束消息,调用generateJobs(time)催生job生成流程5个步骤:

 

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

 

  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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章