(七)Spark源码理解之TaskScheduler----part3

3.TaskSchedulerImpl

具体实现TaskScheduler,是TaskScheduler的子类,也是整个任务实现过程的核心,在对这部分讲述之前介绍几个比较重要的变量:

taskIdToTaskSetId:HashMap容器,key值为task的Id,value值为TaskSet的Id;

taskIdToExecutorId:HashMap容器,key值为task的Id,value值为executor的Id;

activeExecutorIds:HashSet容器,内容为executor的Id,存储有效的executor

executorsByHost:HashMap容器,key值为host,value值为HashSet,HashSet的内容为该host下的executor的Id

executorIdToHostHashMap容器,key值为executor的Id,value值为executor所在的host;

它有几个比较重要的方法来实现它的功能:

initialize():创建SchedulerBackend,以及Pool类,实质上我觉得就是为了创建TaskSetManager;

start():调用SchedulerBackend的start方法,启动SchedulerBackend

此外还有取消任务集,任务集完成,更新任务状态等方法,总的来说就是从相应的容器中删除该任务集的记录,然后输出相应的提示消息

submitTasks():提交任务集,异步执行,首先生成任务集管理器--->将任务集管理器存储在名为激活任务集的HashMap容器中--->将任务集管理器添加到SchedulableBuilder中,实质就是添加到线程池中---->若调度器没有再接收任务且任务被装载了(若内存太大或太小,从节点未注册等装载会失败),则调用TimerTask重写的run()方法,其实这个我总觉的没什么很大的意义,只是给出装载任务未成功时的提示,实际上就是调用的是Timer的sched()方法,接着更新接收任务的标志--->调用SchedulerBackend的reviveOffers()方法,这个才是最主要的

<script src="https://code.csdn.net/snippets/645753.js"></script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值