用最简单的话说明白一件复杂的事情也是一种成就。
Scheduler任务调度器模块作为Spark的核心部件,涉及三个重要的类
1. org.apache.spark.scheduler.DAGScheduler
2. org.apache.spark.scheduler.SchedulerBackend
3. org.apache.spark.scheduler.TaskScheduler
本文用最直白的语言说一说自己对DAGScheduler的理解。
DAGSheduler主要负责分析用户提交的应用,并将DAG进行阶段划分,每个阶段stage包括可以并行执行的多个task,这些task的执行逻辑完全相同,只是应用在不同的数据,最后将这些task提交给taskscheduler。下面分别简述这个过程的几个步骤:
1.DAGScheduler的建立
用户提交编写的sparkcontext时就创建了DAGScheduler和TaskScheduler。
2.job提交
job产生发生在RDD执行动作时,这个动作运行方法runjob,来监听job的运行情况。DAGSheduler通过内部的方法submitJob来提交,但此时的提交只是job最终提交的一小步。此时提交job并生成jobid,将job放入队列中,由DAGSheduler中的方法来依次处理。最后的提交是送给了DAGScheduler.handleJobSubmitted,这个方法会进行处理job并进行阶段划分。