ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ResourceManager总体架构

2021-07-23 11:32:57  阅读:320  来源: 互联网

标签:总体 Container ResourceManager ApplicationMaster 应用程序 RPC 架构 NodeManager


一、ResourceManager基本职能

在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationMaster)。整体上讲,ResourceManager需通过两个RPC协议与NodeManager和(各个应用程序的)ApplicationMaster交互,如图所示,具体如下。

ResourceManager相关RPC协议

ResourceTrackerProtocol:NodeManager通过该RPC协议向ResourceManager注册、汇报节点健康状况和Container运行状态,并领取ResourceManager下达的命令,这些命令包括重新初始化、清理Container等,在该RPC协议中,ResourceManager扮演RPC Server的角色(由内部组件ResourceTrackerService实现),而NodeManager扮演RPC Client的角色,换句话说,NodeManager与ResourceManager之间采用了“pull模型”(与MRv1类似),NodeManager 总是周期性地主动向ResourceManager发起请求,并通过领取下达给自己的命令。   ApplicationMasterProtocol:应用程序的ApplicationMaster通过该RPC协议向ResourceManager注册、申请资源和释放资源。在该协议中,ApplicationMaster扮演RPCClient的角色,而ResourceManager扮演RPC Server的角色,换句话说,ResourceManager与ApplicationMaster之间也采用了“pull模型”。   ApplicationClientProtocol:应用程序的客户端通过该RPC协议向ResourceManager提交应用程序、查询应用程序状态和控制应用程序(比如杀死应用程序)等。在该协议中,应用工程序客户端扮演RPC Client的角色,而ResourceManager扮演RPC Server的角色。   概括起来,ResourceManager主要完成以下几个功能:
  • 与客户端交互,处理来自客户端的请求;
  • 启动和管理ApplicationMaster,并在它运行失败时重新启动它;
  • 管理NodeManager,接收来自NodeManager的资源汇报信息,并向NodeManager下达管理指令(比如杀死Container等);
  • 资源管理与调度,接收来自ApplicationMaster的资源申请请求,并为之分配资源。

二、ResourceManager内部架构

这部分主要介绍ResourceManager的内部组织结构和主要模块,如图所示。
ResourceManager内部架构图 ResourceManager主要由以下几个部分组成:

2.1 用户交互模块

ResourceManager分别针对普通用户、管理员和Web提供了三种对外服务,具体实现分别对应ClientRMService、AdminService和WebApp。   ClientRMService。ClientRMService是为普通用户提供的服务,它处理来自客户端各种RPC请求,比如提交应用程序、终止应用程序、获取应用程序运行状态等。   AdminService。ResourceManager为管理员提供了一套独立的服务接口,以防止大量的普通用户请求使管理员发送的管理命令饿死,管理员可通过这些接口管理集群,比如动态更新节点列表、更新ACL列表、更新队列信息等。    WebApp。为了更加友好地展示集群资源使用情况和应用程序运行状态等信息,YARN对外提供了一个Web 界面,这一部分是YARN仿照Haml。

2.2 NM管理模块

该模块主要涉及以下组件:    NMLivelinessMonitor。监控NM是否活着,如果一个NodeManager在一定时间(默认为10min)内未汇报心跳信息,则认为它死掉了,需将其从集群中移除。   NodesListManager。维护正常节点和异常节点列表,管理exclude(类似于黑名单)和include(类似于白名单)节点列表,这两个列表均是在配置文件中设置的,可以动态加载。   ResourceTrackerService。处理来自NodeManager的请求,主要包括注册和心跳两种请求,其中,注册是NodeManager启动时发生的行为,请求包中包含节点ID、可用的资源上限等信息;而心跳是周期性行为,包含各个Container运行状态,运行的Application列表、节点健康状况(可通过一个脚本设置)等信息,作为请求的应答,ResourceTrackerService可为NodeManager返回待释放的Container列表、Application列表等信息。

2.3 AM管理模块

该模块主要涉及以下组件:   AMLivelinessMonitor。监控AM是否活着,如果一个ApplicationMaster在一定时间(默认为10min)内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被置为失败状态,而AM本身会被重新分配到另外一个节点上(用户可指定每个ApplicationMaster的尝试次数,默认是2)执行。    ApplicationMasterLauncher。与某个NodeManager通信,要求它为某个应用程序启动ApplicationMaster。    ApplicationMasterService(AMS)。处理来自ApplicationMaster的请求,主要包括注册和心跳两种请求,其中,注册是ApplicationMaster启动时发生的行为,注册请求包中包含ApplicationMaster启动节点;对外RPC端口号和tracking URL等信息;而心跳则是周期性行为,汇报信息包含所需资源描述、待释放的Container列表、黑名单列表等,而AMS则为之返回新分配的Container、失败的Container、待抢占的Container列表等信息。

2.4 Application管理模块

该模块主要涉及以下组件:    ApplicationACLsManage。管理应用程序访问权限,包含两部分权限:查看权限和修改权限。查看权限主要用于查看应用程序基本信息,而修改权限则主要用于修改应用程序优先级、杀死应用程序等。    RMAppManager。管理应用程序的启动和关闭。    ContainerAllocationExpirer。当AM收到RM新分配的一个Container后,必须在一定的时间(默认为10min)内在对应的NM上启动该Container,否则RM将强制回收该Container,而一个已经分配的Container是否该被回收则是由ContainerAllocationExpirer决定和执行的。

2.5 状态机管理模块

ResourceManager使用有限状态机维护有状态对象的生命周期,状态机的引入使得YARN设计架构更加清晰。ResourceManager共维护了4类状态机,分别是RMApp、RMAppAttempt、RMContainer和RMNode(这几个均是接口,具体实现类为对应接口名加上"Impl"后缀)。    RMApp。RMApp维护了一个应用程序(Application)的整个运行周期,包括从启动到运行结束整个过程。由于一个Application的生命周期可能会启动多个Application运行实例(Application Attempt),因此可认为,RMApp维护的是同一个Application启动的所有运行实例的生命周期。    RMAppAttempt。一个应用程序可能启动多个实例,即一个实例运行失败后,可能再次启动一个重新运行,而每次启动称为一次运行尝试(或者“运行实例”),用"RMAppAttempt"描述,RMAppAttempt维护了一次运行尝试的整个生命周期。    RMContainer。RMContainer维护了一个Container的运行周期,包括从创建到运行结束整个过程。ResourceManager将资源封装成Container发送给应用程序的ApplicationMaster,而ApplicationMaster则会在Container描述的运行环境中启动任务,因此,从这个层面上讲,Container和任务的生命周期是一致的(目前YARN尚不支持Container重用,一个Container用完后会立刻释放,将来可能会增加Container重用机制)。    RMNode。RMNode维护了一个NodeManager的生命周期,包括启动到运行结束整个过程。

2.6 安全管理模块

ResourceManage自带了非常全面的权限管理机制,主要由ClientTo-AMSecretManager、ContainerTokenSecretManager、ApplicationTokenSecretManager等模块完成。

2.7 资源分配模块

该模块主要涉及一个组件—ResourceScheduler。ResourceScheduler是资源调度器,它按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序,当前主要考虑内存和CPU资源。ResourceScheduler是一个插拔式模块,YARN自带了一个批处理资源调度器—FIFO(First In First Out)和两个多用户调度器—Fair Scheduler和CapacityScheduler。

 

【参考资料】
  • 董西成.《Hadoop技术内幕:深入解析YARN架构设计与实现原理》
转载:https://www.cnblogs.com/lemonu/p/12956810.html

标签:总体,Container,ResourceManager,ApplicationMaster,应用程序,RPC,架构,NodeManager
来源: https://www.cnblogs.com/gentlescholar/p/15048137.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有