在该模式下,除了和上一种类似的线程个数控制之外,还增加了任务失败重试机制的失败重启次数的配置,即可以指定任务失败重试的最大次数为M。
在前3种本地模式中,SchedulerBackend的实现都是LocalBackend,该类的注释如下。
在此简单给出内部实现流程的解析,具体步骤如下。
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的启动代码如下。
其中,Task的调度控制代码参考TaskSchedulerImpl的resourceOfferSingleTaskSet方法。
上述3种Local的部署模式可以通过图3-1来加深理解。
图3-1 3种Local的部署模式图
其中,TaskScheduler与SchedulerBackend的具体子类的具体子类分别为TaskSchedulerImpl与LocalBackend,具体的Task仍然在Executor中执行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。