导读:本文我们将重点介绍集群运行时中ResourceManager的设计和实现,了解如何通过ResourceManager对集群的计算资源进行有效管理 。作者:张利兵
来源:华章科技
文章插图
01 ResourceManager详解ResourceManager作为统一的集群资源管理器,用于管理整个集群的计算资源,包括CPU资源、内存资源等 。
同时,ResourceManager负责向集群资源管理器中申请容器资源启动TaskManager实例,并对TaskManager进行集中管理 。当新的作业提交到集群后,JobManager会向ResourceManager申请作业执行需要的计算资源,进而完成整个作业的运行 。
如图3-12所示,为了兼容Hadoop Yarn、Kubernetes、Mesos等集群资源管理器,在ResourceManager抽象实现类的基础上,分别实现了ActiveResourceManager、
Standalone-ResourceManager以及MesosResourceManager等子类 。
其中ActiveResourceManager实现了动态资源管理,可以根据提交的作业动态选择启动或停止TaskManager实例 。目前支持TaskManager动态管理和启动的ResourceManager主要有KubernetesResourceManager和Yarn-ResourceManager实现类 。
文章插图
▲图3-12 ResourceManager UML关系图
从图3-12中可以看出,ResourceManager通过实现ResourceManagerGateway接口,向其他组件提供RPC远程访问能力,如TaskManager服务和JobManager服务的Resource-ManagerGateway会将RPC访问请求发送到ResourceManager服务中 。
另外,Resource-Manager继承了FencedRpcEndpoint基本实现类,使得ResourceManager可以作为一个RpcEndpoint节点,通过ResourceManagerGateway接口提供给其他服务节点,使之能够以RPC的方式访问ResourceManager服务 。
【Flink的设计与实现:集群资源管理】同时,ResourceManager实现了LeaderContender接口,可以作为竞争节点让LeaderElectionService进行Leader节点的选举,保证整个集群ResourceManager组件服务的高可用 。
从图3-12中也可以看出,ResourceManager主要包含如下成员变量 。
- resourceId:ResourceManager对应的唯一资源ID 。
- jobManagerRegistrations:专门存储JobManager注册信息 。其中Key为JobID;Value为JobManagerRegistration,当启动JobManager服务时,就会将JobManager信息注册在jobManagerRegistrations实例中 。
- jmResourceIdRegistrations:用于存储JobManager注册信息,与jobManagerRegistrations的区别在于Key为ResourceID 。
- jobLeaderIdService:用于获取Job Leader ID的服务,在开启的高可用集群中,当JobManager的Leader节点发生切换时,会借助jobLeaderIdService获取当前作业有效的JobID和地址信息 。
- taskExecutors:注册在ResourceManager的TaskExecutor列表中,其中Key为Task-Executor对应的ResourceID,Value为WorkRegistration,即TaskExecutor向Resource-Manager注册过程中所提供的信息 。
- taskExecutorGatewayFutures:专门存储TaskExecutorGateway的CompletableFuture对象,Key为TaskExecutor对应的ResourceID,Value为CompletableFuture,用于获取Task-ExecutorGateway,实现与TaskExecutor之间的RPC通信 。
- highAvailabilityServices:系统高可用服务,基于highAvailabilityServices服务支持组件高可用 。
- heartbeatServices:用于创建HeartbeatManager服务,和其他组件之间建立心跳连接 。
- fatalErrorHandler:系统异常错误处理,当ResourceManager出现异常时调用fatal-ErrorHandler处理异常错误 。
- slotManager:ResourceManager的内部组件,用于管理集群的可用Slot资源,同时接收并处理TaskExecutor的SlotReport 。
- clusterInformation:存储整个Flink集群共享的信息,包括blobServerHostname和blobServerPort等配置 。
- resourceManagerMetricGroup:ResourceManager的MetricGroup,用于收集和Resource-Manager相关的监控指标 。
- leaderElectionService:基于ZooKeeper实现的Leader选举服务,在这里用于实现Resource-Manager组件高可用 。
- taskManagerHeartbeatManager:管理与TaskManager之间的心跳信息 。
- jobManagerHeartbeatManager:管理与JobManager之间的心跳信息 。
- clearStateFuture:用于停止ResourceManager后进行数据异步清理 。
推荐阅读
- 青砖茶如何保存,青砖茶多少钱
- 水中漫步夏日最爱的减肥运动
- 白领如何吃出窈窕身材 减肥最忌讳的5大零食
- 如何正确减肥? 小心夏季减肥的12个陷阱
- 海南哪里产桔子,麦冬哪里产的最好
- 蔬菜汤瘦身法减肥不反弹
- 香料里面的千里香是孜然吗,莳萝小茴香孜然是种东西吗
- 天山雪莲花的功效与作用,天山雪莲的功效与作用及食用方法
- 夏天晚餐吃什么减肥 边吃边瘦的3款减肥食谱
- 玫瑰菊花茶的禁忌,玫瑰茄泡水喝的禁忌