DT大数据梦工厂Spark定制班笔记(007)

Spark Streaming源码解读之JobScheduler内幕实现和深度思考

接前文Spark Streaming JobSet的提交

JobGenerator.scala (253行)

jobScheduler.submitJobSet(JobSet(time, jobs, streamIdToInputInfos))


我们下面看一下JobScheduler中submitJobSet的实现 (JobScheduler.scala 139-148行)

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)
  }
}
关键之处是job被封装成为JobHandler对象并交由jobExecutor进行执行。
jobExecutor是一个线程池,线程的个数由参数配置。如果需要多个job同时运行,比如在同一个batchInterval中有多个output,则需要配置该参数。
代码如下(JobScheduler.scala 50-52行):
 
private val numConcurrentJobs = ssc.conf.getInt("spark.streaming.concurrentJobs", 1)
private val jobExecutor =
  ThreadUtils.newDaemonFixedThreadPool(numConcurrentJobs, "streaming-job-executor")


JobHandler中最关键的一处代码就是(JobGenerator.scala 247行)

job.run()
 
最后附图 转自http://lqding.blog.51cto.com/9123978/1773391 感谢作者!
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值