首页 理论教育 内部实现流程的解析,具体步骤

内部实现流程的解析,具体步骤

时间:2023-06-29 理论教育 版权反馈
【摘要】:在前3种本地模式中,SchedulerBackend的实现都是LocalBackend,该类的注释如下。1)对应的初始化代码在前面提到的SparkContext类中主要流程的createTaskScheduler方法中,构建TaskScheduler实例后,在初始化该实例时传入同时构建的SchedulerBackend实例。3)在SchedulerBackend的start方法中会构建出一个LocalEndpoint实例,在该实例中就会实例化出一个Executor,Executor实例负责具体的任务执行。5)最终在LocalEndpoint实例处理ReviveOffers消息时启动Task,其他处理类似。图3-1 3种Local的部署模式图其中,TaskScheduler与SchedulerBackend的具体子类的具体子类分别为TaskSchedulerImpl与LocalBackend,具体的Task仍然在Executor中执行。

内部实现流程的解析,具体步骤

在该模式下,除了和上一种类似的线程个数控制之外,还增加了任务失败重试机制的失败重启次数的配置,即可以指定任务失败重试的最大次数为M。

在前3种本地模式中,SchedulerBackend的实现都是LocalBackend,该类的注释如下。

978-7-111-55442-4-Chapter03-43.jpg

在此简单给出内部实现流程的解析,具体步骤如下。

1)对应的初始化代码在前面提到的SparkContext类中主要流程的createTaskScheduler方法中,构建TaskScheduler实例(这里具体子类为TaskSchedulerImpl)后,在初始化该实例时传入同时构建的SchedulerBackend实例(这里具体子类为LocalBackend)。

2)构建出TaskScheduler实例后,会调用实例的start方法,在该方法中首先会调用SchedulerBackend的start方法。

3)在SchedulerBackend的start方法中会构建出一个LocalEndpoint实例,在该实例中就会实例化出一个Executor,Executor实例负责具体的任务执行。

4)之后就是TaskScheduler进行作业调度,调用SchedulerBackend的reviveOffers()方法,然后由该方法向LocalEndpoint实例发送ReviveOffers消息。(www.xing528.com)

5)最终在LocalEndpoint实例处理ReviveOffers消息时启动Task,其他处理类似。对应Task的启动代码如下。

978-7-111-55442-4-Chapter03-44.jpg

其中,Task的调度控制代码参考TaskSchedulerImpl的resourceOfferSingleTaskSet方法。

上述3种Local的部署模式可以通过图3-1来加深理解。

978-7-111-55442-4-Chapter03-45.jpg

图3-1 3种Local的部署模式图

其中,TaskScheduler与SchedulerBackend的具体子类的具体子类分别为TaskSchedulerImpl与LocalBackend,具体的Task仍然在Executor中执行。

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

我要反馈