Spark核心类介绍
SparkContent
SparkContext是Spark的入口,负责连接Spark集群,创建RDD,累积量和广播量等。
其中有两个关键调度器会在SparkContext实例化时启动:- dagScheduler: DAGScheduler
- taskScheduler: TaskScheduler
DAGScheduler
DAGScheduler主要属性:- eventProcessLoop = new DAGSchedulerEventProcessLoop(this)
- jobIdToActiveJob = new HashMap[Int, ActiveJob] 保存jobId和ActiveJob的映射关系
主要方法: - dagScheduler.handleJobSubmitted()
- dagScheduler.handleStageCancellation()
- dagScheduler.handleJobCancellation()
- dagScheduler.handleJobGroupCancelled()
- dagScheduler.doCancelAllJobs()
- dagScheduler.handleExecutorAdded()
- dagScheduler.handleExecutorLost()
- dagScheduler.handleBeginEvent()
- dagScheduler.handleBeginEvent()
- dagScheduler.handleGetTaskResult()
- dagScheduler.handleTaskCompletion()
- dagScheduler.handleTaskSetFailed()
- dagScheduler.resubmitFailedStages()
以上方法DAGSchedulerEventProcessLoop.onReceive(event) 中被调用,主要是根据不同的event对象选择不同的处理方式,
生成对应的job并放入jobIdToActiveJob中DAGSchedulerEventProcessLoop
DAGSchedulerEventProcessLoop的架构其实非常简单,继承了EventLoop[DAGSchedulerEvent]
主要功能:- eventQueue: BlockingQueue[E], 所有需要DAGScheduler处理的事情都需要往eventQueue中发送event
- eventThread 会不断的从eventQueue中获取event并处理,并调用onReceive(event)
- onReceive(event) DAG调度处理的入库,根据接收到得不同event选择不同的处理方式.
TaskScheduler
主要功能:
DAGScheduler为每一个stage生成的tasks在这里进行调度,分发到集群上
待续….