首页 理论教育 任务划分与提交计划

任务划分与提交计划

时间:2023-06-21 理论教育 版权反馈
【摘要】:在第7.3节研究了一个作业转变到多个阶段的调度过程,本节继续讨论如何将阶段进一步细分成并行任务并交付给任务调度器进行调度。同一阶段的所有的任务会被封装成一个任务集,并调用TaskScheduler类的submitTasks函数将任务集提交给了TaskScheduler去调度和执行,至此,我们开始从DAG调度器转换到任务调度器。

任务划分与提交计划

在第7.3节研究了一个作业转变到多个阶段的调度过程,本节继续讨论如何将阶段进一步细分成并行任务并交付给任务调度器进行调度。

阶段到任务转换的过程,在之前提及的DAGScheduler.submitMissingTasks方法中实现,其代码如下。

submitMissingTasks方法首先确定任务的个数,无论是结果阶段还是ShuffleMap阶段,生成的任务个数总与阶段末RDD分区的个数相同,考虑到存在部分任务运行失败,或者任务的部分结果丢失的情况,因此最终任务的个数等于末RDD中分区的个数减去其中已经被计算过的分区的个数。

submitMissingTasks会将阶段的末RDD序列化,而后封装成广播变量,供之后的每个任务使用,从而保证不同任务之间相互孤立,代码如下。

submitMissingTasks方法首先确定任务的个数,无论是结果阶段还是ShuffleMap阶段,生成的任务个数总与阶段末RDD分区的个数相同,考虑到存在部分任务运行失败,或者任务的部分结果丢失的情况,因此最终任务的个数等于末RDD中分区的个数减去其中已经被计算过的分区的个数。

submitMissingTasks会将阶段的末RDD序列化,而后封装成广播变量,供之后的每个任务使用,从而保证不同任务之间相互孤立,代码如下。(www.xing528.com)

抛去中间的部分细节,直接跳到任务被创建的部分,代码如下。

抛去中间的部分细节,直接跳到任务被创建的部分,代码如下。

可以看到,根据阶段类型的不同,并且考虑到任务的执行位置要尽可能跟数据处于同一节点,最终会生成一系列的结果任务或者ShuffleMap任务。同一阶段的所有的任务会被封装成一个任务集(Task Set),并调用TaskScheduler类的submitTasks函数将任务集提交给了TaskScheduler去调度和执行,至此,我们开始从DAG调度器转换到任务调度器。

可以看到,根据阶段类型的不同,并且考虑到任务的执行位置要尽可能跟数据处于同一节点,最终会生成一系列的结果任务或者ShuffleMap任务。同一阶段的所有的任务会被封装成一个任务集(Task Set),并调用TaskScheduler类的submitTasks函数将任务集提交给了TaskScheduler去调度和执行,至此,我们开始从DAG调度器转换到任务调度器。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈