如图3-13所示,通过对ResourceManagerGateway中提供的RPC方法进行梳理,得到JobManager、TaskExecutor、WebMonitorEndpoint和Dispatcher等组件与ResourceManager-Gateway之间的RPC调用关系图 。

文章插图
▲图3-13 ResourceManager调用关系图
从图3-13中可以看出,JobManager、TaskExecutor、WebMonitorEndpoint和Dispatcher组件分别使用如下方法与ResourceManager服务进行交互 。
1. JobManager和ResourceManager 的RPC调用
- registerJobManager():在ResourceManager中注册JobManager服务,此时会在job-LeaderIdService服务中添加注册的JobManager信息 。
- requestSlot():JobManager向ResourceManager申请运行Task所需的Slot资源 。
- heartbeatFromJobManager():用于在JobManager与ResourceManager之间建立长期的心跳连接 。
- disconnectJobManager():根据JobID删除之前注册在ResourceManager中的Job-Manager信息,并且关闭JobManager与ResourceManager之间的RPC连接 。
- heartbeatFromTaskManager():在TaskExecutor中调用heartbeatFromTaskManager()方法,构建TaskExecutor与ResourceManager之间的心跳连接 。
- disconnectTaskManager():停止TaskExecutor组件时会调用disconnectTaskManager()方法断开TaskExecutor与ResourceManager之间的RPC连接 。
- registerTaskExecutor():当新的TaskExecutor启动时,会调用该方法向Resource-Manager注册TaskExecutor信息 。
- sendSlotReport():当TaskExecutor启动并注册成功后,会调用sendSlotReport()方法向ResourceManager上报SlotReport 。SlotReport中包含TaskExecutor的资源数量和配置信息等内容 。
- notifySlotAvailable():当TaskExecutor中具有空闲Slot计算资源时,会调用notify-SlotAvailable()方法通知ResourceManager将该Slot资源变为Available状态 。
- cancelSlotRequest():取消JobManager已经分配的资源 。
- requestResourceOverview():用于在Dispatcher中获取集群资源信息,包括集群中的TaskManager、numberRegisteredSlots以及numberFreeSlots数量 。
- requestTaskManagerMetricQueryServiceAddresses():从ResourceManager获取Task-Manager的MetricQueryService路径,主要用于前端获取TaskManager的监控指标 。
- requestTaskManagerInfo():用于获取TaskManager的相关信息,即TaskExecutor启动过程中注册在ResourceManager的信息,包括TaskExecutor的网关地址、端口以及TaskExecutor的硬件信息 。
- requestTaskManagerFileUpload():请求上传文件到BlobServer上,返回Transient-BlobKey 。

文章插图
▲图3-14 Slot计算资源管理
从图3-14中可以看出,ResourceManager包含了Register Slot和Free Slot两个键值对集合 。其中Register Slot专门存储ResourceManager中所有已经注册的TaskManagerSlot信息,Free Slot集合则存储了当前SlotManager中处于空闲状态且还没有被分配和使用的Slot集合 。
TaskManagerSlot对象包含了SlotID、ResourceProfile以及TaskExecutorConnection等信息 。如果Slot被分配使用,在TaskManagerSlot中还会存储AllocationID和JobID等分配信息,表明当前Slot已经被指定JobID对应的JobManager使用 。
另外,SlotManager还包含了pendingSlotRequests和fulfilledSlotRequests两个键值对集合 。其中pendingSlotRequests存储了所有处于pending和unfulfilled状态的Slot请求,fulfilledSlotRequests存储了所有已经分配完成的Slot请求 。
Slot资源申请都会以Pending-SlotRequest的形式存储在pendingSlotRequests集合中,等待SlotManager根据当前集群的Slot资源进行分配 。
当符合条件的Slot资源分配给指定的PendingSlotRequest后,会为其创建AllocationId,并将分配了AllocationId和SlotId信息的SlotRequest存储到fulfilled-SlotRequests集合中 。
对Slot计算资源的注册和管理,主要是在TaskManager和ResourceManager服务之间进行的,TaskManager作为Slot计算资源的提供方,ResourceManager则作为Slot计算资源的接收和管理方 。这里我们简单梳理一下TaskManager向SlotManager中注册Slot资源的整个过程 。
推荐阅读
- 青砖茶如何保存,青砖茶多少钱
- 水中漫步夏日最爱的减肥运动
- 白领如何吃出窈窕身材 减肥最忌讳的5大零食
- 如何正确减肥? 小心夏季减肥的12个陷阱
- 海南哪里产桔子,麦冬哪里产的最好
- 蔬菜汤瘦身法减肥不反弹
- 香料里面的千里香是孜然吗,莳萝小茴香孜然是种东西吗
- 天山雪莲花的功效与作用,天山雪莲的功效与作用及食用方法
- 夏天晚餐吃什么减肥 边吃边瘦的3款减肥食谱
- 玫瑰菊花茶的禁忌,玫瑰茄泡水喝的禁忌
