Flink 的集群资源管理

集群资源管理
一、ResourceManager 概述

1、ResourceManager 作为统一的集群资源管理器,用于管理整个集群的计算资源,包括 CPU资源、内存资源等。

2、ResourceManager 负责向集群资源管理器申请容器资源启动TaskManager实例,并对TaskManager进行集中管理。

3、当新的 Job 提交到集群后,JobManager 会向 ResourceManager 申请作业执行需要的计算资源,进而完成整个作业的运行。

二、ResourceManager 分类

在ResourceManager抽象实现类的基础上,分别实现了ActiveResourceManager、StandaloneResourceManager以及MesosResourceManager等子类。

其中ActiveResourceManager实现了动态资源管理,可以根据提交的作业动态选择启动或停止TaskManager实例。

目前支持TaskManager动态管理和启动的ResourceManager主要有KubernetesResourceManager和YarnResourceManager实现类。

在这里插入图片描述

三、ResourceManager 功能

在这里插入图片描述

ResourceManager通过实现ResourceManagerGateway接口,向其他组件提供RPC远程访问能力,如TaskManager服务和JobManager服务的ResourceManagerGateway会将RPC访问请求发送到ResourceManager服务中。

在这里插入图片描述

ResourceManager继承了FencedRpcEndpoint基本实现类,使得ResourceManager可以作为一个RpcEndpoint节点,通过ResourceManagerGateway接口提供给其他服务节点,使之能够以RPC的方式访问ResourceManager服务。

在这里插入图片描述

ResourceManager实现了LeaderContender接口,可以作为竞争节点让LeaderElectionService进行Leader节点的选举,保证整个集群ResourceManager组件服务的高可用。

在这里插入图片描述

四、ResourceManager主要成员变量

resourceld:ResourceManager对应的唯一资源ID。

jobManagerRegistrations:专门存储JobManager注册信息。其中Key为JoblD,Value为JobManagerRegistration,当启动JobManager服务时,就会将JobManager信息注册在jobManagerRegistrations实例中。

jmResourceldRegistrations:用于存储JobManager注册信息,与jobManagerRegistrations的区别在于Key为ResourcelD。

jobLeaderldService:用于获取Job Leader ID的服务,在开启的高可用集群中,当JobManager的Leader节点发生切换时,会借助jobLeaderldService获取当前作业有效的JobID和地址信息。

taskExecutors:注册在ResourceManager的TaskExecutor列表中,其中Key为TaskExecutor对应的ResourcelD,Value为WorkRegistration,即TaskExecutor向ResourceManager注册过程中所提供的信息。

taskExecutorGatewayFutures:专门存储TaskExecutorGateway的CompletableFuture对象,Key为TaskExecutor对应的ResourcelD,Value为CompletableFuture,用于获取TaskExecutorGateway,实现与TaskExecutor之间的RPC通信。

highAvailabilityServices:系统高可用服务,基于highAvailabilityServices服务支持组件高可用。

heartbeatServices:用于创建HeartbeatManager服务,和其他组件之间建立心跳连接。

fatalErrorHandler:系统异常错误处理,当ResourceManager出现异常时调用fatalErrorHandler处理异常错误。

slotManager:ResourceManager的内部组件,用于管理集群的可用Slot资源,同时接收并处理TaskExecutor的SlotReport。

clusterinformation:存储整个Flink集群共享的信息,包括blobServerHostname和blobServerPort等配置。

resourceManagerMetricGroup:ResourceManager的MetricGroup用于收集和ResourceManager相关的监控指标。

leaderElectionService:基于ZooKeeper实现的Leader选举服务,在这里用于实现ResourceManager组件高可用。

taskManagerHeartbeatManager:管理与TaskManager之间的心跳信息。

jobManagerHeartbeatManager:管理与JobManager之间的心跳信息。

clearStateFuture:用于停止ResourceManager后进行数据异步清理。

五、ResourceManagerGateway 接口详解
1、概述

ResourceManagerGateway 接口提供了 ResourceManager 需要的RPC方法,供其他集群组件调用。

2、调用关系图

例如在TaskExecutor中调用ResourceManagerGateway完成在ResourceManager中注册TaskExecutor的操作,通过对ResourceManagerGateway中提供的RPC方法进行梳理,得到JobManager、TaskExecutor、WebMonitorEndpoint和Dispatcher等组件与ResourceManagerGateway之间的RPC调用关系图。

在这里插入图片描述

JobManager、TaskExecutor、WebMonitorEndpoint和Dispatcher组件使用如下方法与ResourceManager服务进行交互

1.JobManager和ResourceManager的RPC调用

registerJobManager(): 在ResourceManager中注册JobManager服务,此时会在jobLeaderldService服务中添加注册的JobManager信息

requestSlot(): JobManager向ResourceManager申请运行Task所需的Slot资源。

heartbeatFromJobManager(): 用于在JobManager与ResourceManager之间建立长期的心跳连接

disconnectJobManager(): 根据JobID删除之前注册在ResourceManager中的JobManager信息,并且关闭JobManager与ResourceManager之间的RPC连接。

2.TaskExecutor和ResourceManager的RPC调用

heartbeatFromTaskManager(): 在TaskExecutor中调用heartbeatFromTaskManager()方法,构建TaskExecutor与ResourceManager之间的心跳连接。

disconnectTaskManager():停止TaskExecutor组件时会调用disconnectTaskManager()方法断开TaskExecutor与ResourceManager之间的RPC连接。

registerTaskExecutor(): 当新的TaskExecutor启动时,会调用该方法向ResourceManager注册TaskExecutor信息。

sendSlotReport(): 当TaskExecutor启动并注册成功后,会调用sendSlotReport()方法向ResourceManager上报SlotReport。SlotReport中包含TaskExecutor的资源数量和配置信息等内容。

notifySlotAvailable(): 当TaskExecutor中具有空闲Slot计算资源时,会调用notifySlotAvailable()方法通知ResourceManager将该Slot资源变为Available状态。

cancelSlotRequest(): 取消JobManager已经分配的资源。

3.Dispatcher和ResourceManager的RPC调用

requestResourceOverview(): 用于在Dispatcher中获取集群资源信息,包括集群中的TaskManager、numberRegisteredSlots以及numberFreeSlots数量。

requestTaskManagerMetricQueryServiceAddresses(): 从ResourceManager获取TaskManager的MetricQueryService路径,主要用于前端获取TaskManager的监控指标。

4.WebMonitorEndpoint和ResourceManager的RPC调用

requestTaskManagerinfo(): 用于获取TaskManager的相关信息,即TaskExecutor启动过程中注册在ResourceManager的信息,包括TaskExecutor的网关地址、端口以及TaskExecutor的硬件信息。

requestTaskManagerFileUpload(): 请求上传文件到BlobServer上,返回TransientBlobKey。

六、Slot计算资源管理
1、概述

ResourceManager内部主要通过SlotManager服务统一对整个集群的Slot计算资源进行管理。

Slot被称为资源卡槽,用于表示可以分配的最小计算资源单位,提交的Task最终会运行在Slot表示的计算资源中。

2、组件
1)SlotManager 包含了Register Slot和Free Slot两个键值对集合

其中Register Slot专门存储ResourceManager中所有已经注册的TaskManagerSlot信息,FreeSlot集合则存储了当前SlotManager中处于空闲状态且还没有被分配和使用的Slot集合。

  	/** Map for all registered slots. */private final HashMap<SlotID, TaskManagerSlot> slots;/** Index of all currently free slots. */private final LinkedHashMap<SlotID, TaskManagerSlot> freeSlots;
2)TaskManagerSlot对象包含了SlotID、ResourceProfile以及TaskExecutorConnection等信息

如果Slot被分配使用,在TaskManagerSlot中还会存储AllocationID和JobID等分配信息,表明当前Slot已经被指定JobID对应的JobManager使用。

在这里插入图片描述

3)SlotManager还包含了pendingSlotRequests 和 fulfilledSlotRequests 两个键值对集合

其中 pendingSlotRequests 存储了所有处于 pending 和 unfulfilled 状态的 Slot 请求。

fulfilledSlotRequests 存储了所有已经分配完成的Slot请求。

		/** Map of fulfilled and active allocations for request deduplication purposes. */private final HashMap<AllocationID, SlotID> fulfilledSlotRequests;/** Map of pending/unfulfilled slot allocation requests. */private final HashMap<AllocationID, PendingSlotRequest> pendingSlotRequests;

Slot 资源申请都会以 PendingSlotRequest 的形式存储在 pendingSlotRequests 集合中,等待 SlotManager 根据当前集群的 Slot 资源进行分配。

当符合条件的 Slot 资源分配给指定的 PendingSlotRequest 后,会为其创建 Allocationld,并将分配了 Allocationld 和 Slotld 信息的SlotRequest 存储到 fulfilledSlotRequests 集合中。

3、流程图

在这里插入图片描述

1)Slot计算资源的注册和管理
1.概述

对Slot计算资源的注册和管理,主要是在TaskManager和ResourceManager服务之间进行的,TaskManager作为Slot计算资源的提供方,ResourceManager则作为Slot计算资源的接收和管理方,梳理TaskManager向SlotManager中注册Slot资源的整个过程。

2.流程

a)启动TaskManager后,调用ResourceManagerGateway.registerTaskExecutor()方法向ResourceManager中注册TaskManager连接信息。

b)创建TaskManager和ResourceManager之间的RPC连接,TaskManager调用ResourceManagerGateway.sendSlotReport()方法向ResourceManager发送SlotReport信息,接着ResourceManager调用SlotManager.registerTaskManager()方法,将TaskManager的资源信息写入SlotManager。

c)在SlotManager中根据SlotReport中的Slot信息创建TaskManagerSlot,并注册到SlotManager的HashMap<SlotID,TaskManagerSlot> slots集合中。

SlotManager含有HashMap<SlotID,TaskManagerSlot> slots和LinkedHashMap<SlotlD,TaskManagerSlot> freeSlots两个Slot集合。前者维护所有注册到SlotManager中的Slot计算资源,后者存储当前SlotManager中可用的Slot资源。

2)为作业申请Slot计算资源
1.概述

在SIotManager中完成SIot资源注册后,等待集群提交和运行作业。

JobManager通过调用ResourceManagerGateway中的相关方法为作业申请Slot计算资源。

2.流程

a)JobManager调用ResourceManagerGateway.requestSlot()方法向ResourceManager发起Slot计算资源申请。

b)ResourceManager内部会调用SlotManager.registerSlotRequest()方法,向SlotManager申请作业需要的Slot计算资源。

c)SlotManager中维护了HashMap<AllocationlD,PendingSlotRequest>pendingSlotRequests集合,将所有的PendingSlotRequest存储在该集合中,并根据SlotRequest的ResourceProfile匹配合适的Slot计算资源,然后对Slot进行分配。

当 SlotRequest 需要的 Slot 计算资源分配完毕后,将已经分配的 SlotlD 信息写入 HashMap<AllocationlD,SlotlD> fulfilledSlotRequests集合。

SlotManager 组件会对 Slot 进行统一的管理,在内部构建一个 Slot 计算资源池,有新的 Slot 注册时,会优先从 pendingSlotRequests 集合中获取处于 Pending 状态的 SlotRequest,并为该 SlotRequest 分配Slot计算资源。

3)流程图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity DOTS System与SystemGroup概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面System关键概念&#xff0c;方便大家上手学习掌握Unity DOTS开发。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; System是迭代计算与处理World中的…

ASEMI肖特基二极管MBR10100CT参数,MBR10100CT封装

编辑-Z MBR10100CT参数描述&#xff1a; 型号&#xff1a;MBR10100CT 最大重复峰值反向电压VRRM&#xff1a;100V 最大RMS电压VRMS&#xff1a;70V 最大直流阻断电压VDC&#xff1a;100V 最大平均正向电流IF&#xff1a;10A 峰值正向浪涌电流IFSM&#xff1a;150A 最大…

JAVA发送消息到RabbitMq

项目中&#xff0c;作为生产者自定义消息发送到RabbitMq。 1.引入rmq依赖 <!-- rabbitmq 依赖 --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.9.0</version></dependen…

【C++】vector

vector基本介绍 1. vector 表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c; vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对 vector 的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#x…

光储并网直流微电网simulink仿真模型,光伏采用mppt实现最大功率输出研究

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux内核驱动开发:技能、应用和挑战

Linux内核驱动开发&#xff1a;技能、应用和挑战 Linux内核驱动开发所需技能包括C语言和汇编语言编程、Linux系统编程接口、内核原理和机制、设备驱动开发和调试技术等。同时&#xff0c;熟悉常用的开发环境和工具如GNU工具链、make、gcc、gdb等也是必要的。 Linux内核驱动开…

亚马逊云科技Amazon CodeWhisperer 极客之选!

使用了一段时间的Amazon CodeWhisperer&#xff0c;直接作为插件搭配VS Code&#xff0c;安装很方便。 在平常写代码的时候使用率很高&#xff0c;个人使用过最近的语言大模型&#xff0c;感觉这个CodeWhisperer像是专门是在代码数据上训练的模型&#xff0c;但是又不止是会写代…

单链表算法经典OJ题

目录 1、移除链表元素 2、翻转链表 3、合并两个有序链表 4、获取链表的中间结点 5、环形链表解决约瑟夫问题 6、分割链表 1、移除链表元素 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; typedef struct ListNode LSNode; struct ListNode* remove…

Nginx介绍,nginx高级应用,nginx虚拟主机配置

HTTP介绍 在应用层 : HTTP&#xff0c;FTP&#xff0c;ssh&#xff0c;SMTP&#xff0c;POP3 网络层&#xff1a; TCP&#xff0c;UDP TCP:可靠的&#xff0c; UDP&#xff1a;不可靠的&#xff0c;直播&#xff0c;视频 qq 微信 HTTP协议是Hyper Text Transfer Protocol&#…

宏电股份RedCap产品亮相迪拜华为MBBF,并参与RedCap全球商用阶段性成果发布

10月10-11日&#xff0c;由华为主办的第十四届全球移动宽带论坛&#xff08;MBBF&#xff09;在阿联酋迪拜成功举办。MBBF期间&#xff0c;华为联合宏电股份等产业伙伴集中发布RedCap商用阶段性成果。本次发布是RedCap产业的关键里程碑&#xff0c;标志着RedCap在全球已具备规模…

使用 Service 把前端连接到后端

使用 Service 把前端连接到后端 如何创建前端&#xff08;Frontend&#xff09;微服务和后端&#xff08;Backend&#xff09;微服务。后端微服务是一个 hello 欢迎程序。 前端通过 nginx 和一个 Kubernetes 服务暴露后端所提供的服务。 使用部署对象&#xff08;Deployment ob…

Quartus调用FIFO-IP核verilog,DE1开发板,代码和视频

名称&#xff1a;Quartus调用FIFO-IP核&#xff0c;完成数据的求和 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 题目&#xff1a;FIFO-IP核的调用 主要内容&#xff1a;调用两个FIFO-IP核&#xff0c;完成2行数据的求和 技术参数&#xff1a…

【ArcGIS绘图系列1】在ArcGIS中制作柱状图与饼状图

成图展示 图形出处&#xff1a;J2023-Assessment of agricultural drought based on multi-source remote sensing data in a major grain producing area of Northwest China 实现步骤 第一步 查看数据信息 数据输入到ArcGIS中&#xff1a;包含数据表和shp文件 1、shp文件…

Flink之Window窗口机制

窗口Window机制 窗口概述窗口的分类是否按键分区按键分区窗口非按键分区 按照驱动类型按具体分配规则滚动窗口Tumbling Windows滑动窗口 Sliding Windows会话窗口 Session Windows全局窗口 Global Windows 时间语义窗口分配器 Window Assigners时间窗口计数窗口例子 窗口函数 W…

[opencv]图像和特征点旋转

本来说这是很简单的一个内容&#xff0c;图像旋转只需要使用opencv中自带的旋转函数即可完成&#xff0c;但是最近在做特征点旋转的时候发现使用内置rotate函数给图像旋转90度&#xff0c;再用getRotationMatrix2D得出的旋转矩阵对特征点旋转&#xff0c;画出来的特征点位置全部…

FIFO设计16*8,verilog,源码和视频

名称&#xff1a;FIFO设计16*8&#xff0c;数据显示在数码管 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 使用verilog语言设计一个16*8的FIFO&#xff0c;深度16&#xff0c;宽度为8。可对FIFO进行写和读&#xff0c;并将FIFO读出的数据显示到…

.NET验收

验收通用模板&#xff1a; 1.该资料计划看几天&#xff1f; 实际看了几天&#xff1f; 计划7天&#xff0c;实际看了9天 2.多少天一篇总结&#xff1f;将总结列出来。 一周总结一篇。 博客地址:3.这个资料相较于之前资料共同的内容是什么&#xff1f; 不同的(需要强化学习)…

openssl 之 RSA加密数据设置OAEP SHA256填充方式

背景 如题 环境 openssl 1.1.1l c centos7.9 代码 /** 思路&#xff1a;填充方式自己写&#xff0c;不需要使用库提供的&#xff0c;然后加密时选择不填充的方式加密 关键代码 */ int padding_result RSA_padding_add_PKCS1_OAEP_mgf1(buf, padding_len, (unsigned char*…

云计算认证有哪些?认证考了有什么用?

云计算作为一项快速发展的技术&#xff0c;对人才的需求持续增长。无论是男生还是女生&#xff0c;只要具备相关的技能和知识&#xff0c;都可以在云计算领域找到就业机会。 目前入行云计算最好最便捷的方式就是考证&#xff0c;拿到一个云计算相关的证书&#xff0c;就能开启…

DETR原理与代码超详细解读

文章目录 前言一、DETR论文原理1、DETR整体介绍2、DETR论文贡献3、DETR模型框架4、DETR基于二分图匹配的LOSS 二、DETR环境安装1、安装基础环境2、pycocotools安装3、其它环境安装4、环境验证5、训练与推理效果显示 三、数据准备1、coco 数据格式2、修改数据 四、DETR加载数据代…