首页 > 其他 > 详细

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

时间:2016-05-22 13:52:26      阅读:116      评论:0      收藏:0      [点我收藏+]

本期内容:

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内幕实现和深度思考

原文:http://www.cnblogs.com/pzwxySpark/p/Spark7.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!