欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ResourceManager基本职能和内部架构

程序员文章站 2023-11-11 00:01:16
YARN也采用了Master/Slave结构,其中,Master实现为ResourceManager,负责整个集群资源的管理与调度;Slave实现为NodeManager,负责单个节点的资源管理与任务启动 ResourceManager是整个YARN集群中最重要的组件之一,它的设计直接决定了系统的可 ......
yarn也采用了master/slave结构,其中,master实现为resourcemanager,负责整个集群资源的管理与调度;slave实现为nodemanager,负责单个节点的资源管理与任务启动
resourcemanager是整个yarn集群中最重要的组件之一,它的设计直接决定了系统的可扩展性、可用性和容错性等特点,它的功能较多,包括applicationmaster管理(启动、停止等)、nodemanager管理、application管理、状态机管理等
 

 
resourcemanager负责集群中所有资源的统一管理和分配,它接收来自各个节点的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序
 
resourcemanager基本职能
 
resourcemanager需通过两个rpc协议与nodemanager和appmaster交互,具体如下 :
  • resourcetracker : nodemanager通过该rpc协议向resourcemanager注册、汇报节点健康状况和container运行状态,并领取resourcemanager下达的命令,这些命令包括重新初始化、清理container等,在该rpc协议中,resourcemanager扮演rpcserver的角色,而nodemanager扮演rpcclient的角色,换句话说,nodemanager与resourcemanager之间采用了“pull模型”,nodemanager总是周期性地主动向resourcemanager发起请求,并通过领取下达给自己的命令 
  • applicationmasterprotocol :应用程序的applicationmaster通过该rpc协议向resourcemanager注册、申请资源和释放资源。在该协议中,applicationmaster扮演rpc client的角色,而resourcemanager扮演rpc server的角色,换句话说,resourcemanager与applicationmaster之间采用了“pull模型”
  • applicationclientprotocol :应用程序的客户端通过该rpc协议向resoucemanager提交应用程序、查询应用程序状态和控制应用程序等。在该协议中,应用程序客户端扮演rpc client的角色,而resourcemanager扮演rpc server的角色
 
resourcemanager主要完成以下几个功能 :
  • 与客户端交互,处理来自客户端的请求
  • 启动和管理appicationmaster,并在它运行失败时重新启动它
  • 管理nodemanager,接收来自nodemanager的资源汇报信息,并向nodemanager下达管理指令
  • 资源管理与调度,接收来自appmaster的资源申请请求,并为之分配资源
 
resoucemanager内部架构
 
resourcemanager主要由以下几个部分组成 :
  • 用户交互模块。resourcemanager分别针对普通用户、管理员和web提供了三种对外服务,具体实现分别对应clientrmservice、adminservice和webapp
    • clientrmservice。clientrmservice是为普通用户提供的服务,它处理来自客户端各种rpc请求,比如提交应用程序、终止应用程序、获取应用程序运行状态等
    • adminservice。resourcemanager为管理员提供了一套独立的服务接口,以防止大量的普通用户请求使管理员发送的管理命令饿死,管理员可通过这些接口管理集群,比如动态更新节点列表、更新acl列表、更新队列信息等
    • webapp。为了更加友好地展示集群资源使用情况和应用程序运行状态等信息,yarn对外提供了一个web界面,这一部分是yarn仿照haml开发的一个轻量级嵌入式web框架
  • nm管理模块。该模块主要涉及以下组件 :
    • nmlivelinessmonitor。监控nm是否活着,如果一个nodemanager在一定时间内未汇报心跳信息,则认为它死掉了,需将其从集群中移除
    • nodeslistmanager。维护正常节点和异常节点列表,管理exclude(类似于黑名单)和include(类似于白名单)节点列表,这两个列表均是在配置文件中设置的,可以动态加载
    • resourcetrackerservice。处理来自nodemanager的请求,主要包括注册和心跳两种请求,其中,注册时nodemanager启动时发生的行为,请求包中包含节点id、可用的资源上限等信息;而心跳时周期性行为,包含各个container运行状态,运行的application列表、节点资源状况等信息,作为请求的应答,resourcetrackerservice可为nodemanager返回待释放的container列表、application列表等信息
  • am管理模块。该模块主要涉及以下组件 :
    • amlivelinessmonitor。监控am是否活着,如果一个applicationmaster在一定时间内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的container将被置为失败状态,而am本身会被重新分配到另外一个节点上执行
    • applicationmasterlauncher。与某个nodemanager通信,要求它为某个应用程序启动applicationmaster
    • applicationmasterservice。处理来自applicationmaster的请求,主要包括注册和心跳两种请求,其中,注册是applicationmaster启动时发生的行为,注册请求包中包含applicationmaster启动节点;对外rpc端口号和trackingurl等信息;而心跳而是周期性行为,汇报信息包含所需资源描述、待释放的container列表、黑名单列表等,而ams则为之返回新分配的container、失败的container、待抢占的container列表等信息
  • application管理模块。该模块主要涉及以下组件 :
    • applicationaclsmanager。管理应用程序访问权限,包含两部分权限 :查看权限和修改权限。查看权限主要用于查看应用程序基本信息,而修改权限则主要用于修改应用程序优先级、杀死应用程序等
    • rmappmanager。管理应用程序的启动和关闭
    • containerallocationexpirer。当am收到rm新分配的一个container后,必须在一定的时间内在对应的nm上启动该container,否则rm将强制回收该container,而一个已经分配的container是否该被回收则是由containerallocationexpirer决定和执行的
  • 状态机管理模块。resourcemanager使用有限状态机维护有状态对象的生命周期,状态机的引入使得yarn设计架构更加清晰。resourcemanager共维护了四类状态机,分别是rmapp、rmappattempt、rmcontainer和rmnode
    • rmapp。rmapp维护了一个应用程序的整个运行周期,包括从启动到运行结束整个过程。由于一个application的生命周期可能会启动多个application运行实例,因此可认为,rmapp维护的是同一个application启动的所有运行实例的生命周期
    • rmappattempt。一个应用程序可能启动多个实例,即一个实例运行失败后,可能再次启动一个重新运行,而每次启动称为一个运行尝试,用“rmappattempt”描述,rmappattempt维护了一次运行尝试的整个生命周期
    • rmcontainer。rmcontainer维护了一个container的运行周期,包括从创建到运行结束整个过程。rm将资源封装成container发送给应用程序的applicationmaster,而applicationmaster则会在container描述的运行环境中启动任务,因此,从这个层面上讲,container和任务的生命周期是一致的
    • rmnode。rmnode维护了一个nodemanager的生命周期,包括启动到运行结束整个过程
  • 安全管理模块。resourcemanager自带了非常全面的权限管理机制,主要由clienttoamsecretmanager、containertokensecretmanager、applicationtokensecretmanager等模块完成
  • 资源分配模块。该模块主要涉及一个组件 -- resourcescheduler。resourcescheduler是资源调度器,它按照一定的约束条件将集群中的资源分配给各个应用程序,当前主要考虑内存和cpu资源。resourcescheduler是一个插拔式模块,yarn自带了一个批处理资源调度器 -- fifo和两个多用户调度器 -- fair scheduler和capacity scheduler
                                               resoucemanager内部架构图
ResourceManager基本职能和内部架构
 
 
我每天会写文章记录大数据技术学习之路,另外我自己整理了些大数据的学习资料,目前全部放在我的公众号"smallbird技术分享",加入我们一起学习交流,并且回复'分享'会有大数据资源惊喜等着你~