Spark版本定制第7天:JobScheduler内幕实现和深度思考

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark版本定制第7天:JobScheduler内幕实现和深度思考相关的知识,希望对你有一定的参考价值。

本期内容:

1 JobScheduler内幕实现

2 深度思考

  一切不能进行实时流处理的数据都是无效的数据。在流处理时代,SparkStreaming有着强大吸引力,而且发展前景广阔,加之Spark的生态系统,Streaming可以方便调用其他的诸如SQL,MLlib等强大框架,它必将一统天下。

  Spark Streaming运行时与其说是Spark Core上的一个流式处理框架,不如说是Spark Core上的一个最复杂的应用程序。如果可以掌握Spark streaming这个复杂的应用程序,那么其他的再复杂的应用程序都不在话下了。这里选择Spark Streaming作为版本定制的切入点也是大势所趋。

 

在job生成方法中JobGenerator中会每隔batchInterval时间会动态的生成JobSet提交给JobScheduler

private def generateJobs(time: Time) {
  // Set the SparkEnv in this thread, so that job generation code can access the environment
  // Example: BlockRDDs are created in this thread, and it needs to access BlockManager
  // Update: This is probably redundant after threadlocal stuff in SparkEnv has been removed.
  SparkEnv.set(ssc.env)
  Try {
    jobScheduler.receiverTracker.allocateBlocksToBatch(time) // allocate received blocks to batch
    graph.generateJobs(time) // generate jobs using allocated block
  } match {
    case Success(jobs) =>
      val streamIdToInputInfos = jobScheduler.inputInfoTracker.getInfo(time)
      jobScheduler.submitJobSet(JobSet(time, jobs, streamIdToInputInfos)) //提交jobSet
    case Failure(e) =>
      jobScheduler.reportError("Error generating jobs for time " + time, e)
  }
  eventLoop.post(DoCheckpoint(time, clearCheckpointDataLater = false))
}

  在submitJobSet方法中,会为每个job生成一个JobHandler,交给jobExecutor运行。

def submitJobSet(jobSet: JobSet) { 
  if (jobSet.jobs.isEmpty) { 
    logInfo("No jobs added for time " + jobSet.time) 
  } else { 
    listenerBus.post(StreamingListenerBatchSubmitted(jobSet.toBatchInfo)) 
    jobSets.put(jobSet.time, jobSet) 
    jobSet.jobs.foreach(job => jobExecutor.execute(new JobHandler(job))) 
    logInfo("Added jobs for time " + jobSet.time) 
  } 
} 

  

private val jobExecutor =
  ThreadUtils.newDaemonFixedThreadPool(numConcurrentJobs, "streaming-job-executor")

  在生成的线程池中,利用生成的JobHandler来处理事件。在这里面JobHandler会调用job.run(),它将触发Job.func的真正执行!这里job便开始运行。

 

备注:

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

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

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

以上是关于Spark版本定制第7天:JobScheduler内幕实现和深度思考的主要内容,如果未能解决你的问题,请参考以下文章

Spark版本定制七:Spark Streaming源码解读之JobScheduler内幕实现和深度思考

Spark 定制版:007~Spark Streaming源码解读之JobScheduler内幕实现和深度思考

Spark版本定制第13天:Driver容错

Spark版本定制第8天:RDD生成生命周期彻底

Spark版本定制第10天:流数据生命周期和思考

Spark版本定制第6天:Job动态生成和深度思考