概述
RM包含两个组件Scheduler and ApplicationsManager。
- Scheduler:以容器的形式分配资源。Scheduler不监控应用状态,不负责重启失败作业。
- ApplicationsManager:负责接收提交的任务。拉起第一个容器,也就是执行ApplicationMaster的容器。ApplicaitonMaster容器挂时重启。
RM主要:
管理AM(失败重启)
管理NM(杀Container,强制归还Container资源给其他应用)
与Client交互
给AM分配资源
ApplicationMaster:从Scheduler申请其他需要的容器,并监控他们状态。
RM把需要数据存到ZK的/rmstore/ZKRMStateRoot节点下
/rmstore/ZKRMStateRoot/RMAppRoot/${application_id} 存 提交App的信息
架构图
模块
0x01 用户交互模块
ClientRMService
(为普通用户提供的RPC服务组件,处理来自客户端的各种RPC请求,比如查询YARN集群信息,提交、终止应用等)接收到应用提交请求,简单校验后将请求转交给RMAppManager(YARN RM内部管理应用生命周期的组件);
AdminService
RMWebApp
0x02 NM管理模块
NMLivelinessMonitor
如果默认10min(yarn.nm.liveness-monitor.expiry-interval-ms配置)NM没上报心跳则认为死。
NodesListManager
管理exclude(类似黑名单)、include(类似白名单)列表。黑白名单概念Yarn其他地方有含义。默认情况两个列表均为空。在exclude列表中的主机不能和RM通信(直接报错)。
通过yarn.resourcemanager.nodes.include-path、yarn.resourcemanager.nodes.exclude-path选项配置。
bin/yarn rmadmin -refreshNodes 可以动态加载这俩文件。
ResourceTrackerService
ResourceTracker协议Server。请求分两种注册和心跳。
注册请求包含:节点ID、可用资源上限等。ResourceTracker.registerNodeManager
心跳请求包含:容器状态、Application列表、节点健康状况等。ResourceTracker.nodeHeartbeat
0x03 AM管理模块
ApplicationMasterLauncher
AM生命周期管理服务,负责启动或清理AM container。
收到“LAUNCH”事件,向NM请求启动AM;收到“CLEANUP”事件,杀掉AM。
AMLivelinessMonitor
如果默认10min(yarn.am.liveness-monitor.expiry-interval-ms配置)AM没上报心跳则认为死。
ApplicationMasterService
处理ApplicationMasterProtocol协议请求。
RMAppManager初始化应用运行实例信息,并向ApplicationMasterService(AM&RM协议接口服务,处理来自AM的请求,主要包括注册和心跳)注册,应用实例状态变为SUBMITTED。
0x04 Application管理模块
ApplicationACLsManager
应用程序访问权限控制。分查看权限和修改权限。
查看权限:查看运行时间、优先级等信息。
修改权限:修改优先级、杀死程序等。
默认普通用户可以查看所有其他用户应用程序。应用程序拥有用户和集群管理员(yarn-site.xml的yarn.admin.ack设置)有查看和修改权限。
其他用户和用户组想要获得权限需要Client在ContainerLaunchContext类实例化时传入用户和用户组名来赋予。
一般情况下,运行在Yarn上的计算框架实现了提交程序时动态设置。
RMAppManager
负责应用程序启动和关闭。ClientRMService收到客户端请求会调用RMAppManager.submitApplication
创建RMApp对象,维护应用程序整个生命周期。RMApp运行结束触发RMAPPManagerEventType.APP_COMPLETED事件调用RMAppManager.finishApplicaiton。
finish分两部分:
一、将应用放到完成列表。用户可查看历史运行信息。列表默认大小10000(yarn.resourcemanager.max-completed-applicaitons设置),超过最大值则移除内存存入硬盘,用户只能通过History Server查看。
二、将应用从RMStateStore中移除。RMStateStore存储运行中程序的运行日志。出故障后,RM可以通过这些日志恢复程序。
根据应用提交上下文内容创建初始状态为NEW的应用,将应用状态持久化到RM状态存储服务(例如ZooKeeper集群,RM状态存储服务用来保证RM重启、HA切换或发生故障后集群应用能够正常恢复,后续流程中的涉及状态存储时不再赘述),应用状态变为NEW_SAVING;
ContainerAllocationExpirer
决定和执行回收已分配容器。如果AM申请的容器在默认10min(yarn.resourcemanager.rm.container-allocation.expiry-interval-ms)内没有在对应的NM上启动,RM将强制回收。
0x05 状态机管理模块
四大状态机:RMApp、RMAppAttempt、RMContainer、RMNode。
https://www.yuque.com/deadwind/notes/eh81vb
0x06 安全管理模块
0x07 资源分配模块
https://www.yuque.com/deadwind/notes/cszfgl