1 资源
资源分析分3部分,资源请求,资源提供,声明式资源管理,本文是第二部分资源提供
2 注册任务管理器/报告资源
任务管理器启动后注册到资源管理器,报告自身资源,资源通过这个方式新增的
1. 任务管理器启动,同时启动高可用组件,触发
ResourceManagerLeaderListener监听机制,注意,ResourceManagerLeaderListener有两个,一个是作业管理器,一个是任务管理器,这里毫无疑问用任务管理器相关的那个
2.
ResourceManagerLeaderListener调用TaskExecutor的notifyOfNewResourceManagerLeader方法
3.
notifyOfNewResourceManagerLeader方法使用RegisteredRpcConnection连接到资源管理器
4. RegisteredRpcConnection连接完成后,触发事件onRegistrationSuccess,onRegistrationSuccess调用资源管理器的sendSlotReport(rpc)方法报告资源
5. ResourceManager的sendSlotReport方法,调用SlotManager注册任务管理器和登记资源
6. 最后采用延时异步方式执行《检查资源请求》,有了新资源,资源变更了,触发处理资源请求
3 请求使用资源(request slots)/提供资源(offer slots)
调度器申请和分配资源,匹配了合适的空闲资源,资源管理器请求资源所属的任务管理器使用资源,任务管理器确认提供资源
资源请求使用和提供两步操作,资源管理器不直接使用资源,主要让资源使用情况放在任务管理器,资源管理器下线, 选出新资源管理器master,任务管理器重新注册,恢复资源使用情况
1. 调度器分配资源完成,向资源所在的任务管理器TaskExecutor发出使用请求requestSlot
2. TaskExecutor调用allocateSlotForJob,登记资源使用,登记信息包括jobId, slotId, allocationId, resourceProfile, targetAddress
3. TaskExecutor rpc-offerSlots通知JobMaster,确认提供资源
4. JobMaster转交SlotPool的offerSlots处理,同样,最终处理是DeclarativeSlotPool
5. DeclarativeSlotPool的
matchOfferWithOutstandingRequirements匹配offerSlot与未完成的资源请求,构建AllocatedSlot
6. 最后AllocatedSlot放入资源slot分配池AllocatedSlotPool,返回接收的offerSlots给TaskExecutor处理,没有匹配部分不接收