YARN-ResourceManager的整体剖析

最近在查YARN的一些问题,就总结一下YARN中RM的整体代码模块

一 ResourceManager的通信协议

  • ApplicationClientProtocol : 客户端同ResourceManager之间的通信:提交,退出作业,获取作业信息,集群指标,队列信息,安全访问控制等
  • ApplicationMasterProtocol : ApplicationMaster 同 ResourceManager 之间的通信:主要是am向rm注册,退出
  • ContainerManagementProtocol : ApplicationMaster 和 nodemanager 之间的通信:停止container,获取container信息
  • ResourceTracker : 向ResourceManager注册,退出,心跳等信息
  • LocalizationProtocol : ContainerLocalizer 进程向 NM 报告资源下载进度
  • TaskUmbilicalProtocol : MRChild 向 MRAppMaster 获取任务、报告进度等
  • MRClientProtocol : client 向 ApplicationMaster获取作业信息 。 杀掉作业等

具体的图解

二 主要的职责

  • 同客户端交互,处理客户端请求
  • 启动和管理ApplicationMaster
  • 管理NodeManager

2.1 客户端交互相关

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

2.2 管理NodeManager

  • RMNodeLabelsManager : 标签节点管理器
  • NMLivelinessMonitor: 检测nm是否存活,检查参数  yarn.nm.liveness-monitor.expiry-interval-ms 默认600000
  • NodesListManager : 维护正常节点和异常节点列表,管理exclude(类似于黑名单)和include(类似于白名单)节点列表,这两个列表均是在配置文件中设置的,可以动态加载
  • ResourceTrackerService : 处理来自NodeManager的请求,主要包括注册和心跳两种,其中,注册是NodeManager启动时发生的行为,请求包中包含节点的ID、可用的资源上线等信息;而心跳是周期性行为,包括各个Container运行状态、运行的各个Application列表、节点健康状况(可通过一个脚本设置)等信息,作为请求的应答,ResourceTrackerService可为NodeManager返回待释放的Container列表、Application列表等信息。 默认端口是8031.

2.3 AM管理模块

在ApplicationMasterService和RMActiveServices两个服务中

ApplicationMasterService : 处理来自ApplicationMaster的请求,主要包括注册和心跳两种请求

AMLivelinessMonitor : AM的心跳超时处理。 具体又分为 amLivelinessMonitor 和 amFinishingMonitor

RMActiveServices中

ApplicationMasterLauncher : 与某个NodeManager通信,要求它为某个应用程序启动ApplicationMaster

2.4 Application管理模块

  • ApplicationACLsManager : 管理应用程序访问权限,包含两部分权限:查看权限和修改权限。查看权限主要用于查看应用程序基本信息,而修改权限则主要用于修改应用程序优先级、杀死应用程序等
  • RMStateStore: 作业会话管理,默认是MemoryRMStateStore ,需要的话设置yarn.resourcemanager.work-preserving-recovery.enabled ,可以通过  yarn.resourcemanager.store.class来调整。
  • RMAppManager:管理应用程序的启动和关闭
  • ContainerAllocationExpirer: 当AM收到RM新分配的一个Container后,必须在一定时间(默认为10min)内在对应的NM上启动该Container,否则RM将强制回收该Container,而一个已经分配的Container是否该被回收则是由ContainerAllocationExpirer决定和执行的

2.5 资源

  • ResourceScheduler : 资源调度期 ,可以通过yarn.resourcemanager.scheduler.class 来设置,默认是org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler 。
  • EventHandler : 调度事件的处理器 ,默认是SchedulerEventDispatcher 。这个调度处理器,注册了RMAppEventType,RMAppAttemptEventType,RMNodeEventType 三种事件类型
  • QueueACLsManager : 队列权限控制
  • SchedulingMonitor : 调度监控,yarn.resourcemanager.scheduler.monitor.enable 来控制是否开启,监控策略 yarn.resourcemanager.scheduler.monitor.policies来指定,目前已经存在的实现  org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy 。

2.6 事件处理器

Dispatcher : 全局的时间处理器,默认实现是 AsyncDispatcher 。 注册了NodesListManagerEventType,SchedulerEventType,RMAppEventType,RMAppAttemptEventType,RMNodeEventType,RMAppManagerEventType,AMLauncherEventType,RMFatalEventType

2.7 状态机管理模块

  • RMApp: 维护一个作业的生命周期
  • RMAppAttempt:维护一个试探性作业的生命周期
  • RMContainer:维护一个Container的生命周期
  • RMNode:维护一个NodeManager的生命周期

2.8 其他

ConfigurationProvider : 配置文件加载方式

各种的实现类都是加上Impl. 分别是

  • RMAppImpl
  • RMAppAttemptImpl
  • RMContainerImpl
  • RMNodeImpl

RMAppImpl的全部状态  RMAppState


  •     RMAPP_NEW
  •     RMAPP_NEW_SAVING
  •     RMAPP_SUBMITTED
  •     RMAPP_ACCEPTED
  •     RMAPP_RUNNING
  •     RMAPP_FINAL_SAVING
  •     RMAPP_FINISHING
  •     RMAPP_FINISHED
  •     RMAPP_FAILED
  •     RMAPP_KILLED

 

RMAppAttemptImpl的全部状态 RMAppAttemptState


  •     RMATTEMPT_NEW
  •     RMATTEMPT_SUBMITTED
  •     RMATTEMPT_SCHEDULED
  •     RMATTEMPT_ALLOCATED
  •     RMATTEMPT_LAUNCHED
  •     RMATTEMPT_FAILED
  •     RMATTEMPT_RUNNING
  •     RMATTEMPT_FINISHING
  •     RMATTEMPT_FINISHED
  •     RMATTEMPT_KILLED
  •     RMATTEMPT_ALLOCATED_SAVING
  •     RMATTEMPT_LAUNCHED_UNMANAGED_SAVING
  •     RMATTEMPT_RECOVERED
  •     RMATTEMPT_FINAL_SAVING

RMContainerImpl的全部状态RMContainerState


  •   NEW
  •   RESERVED
  •   ALLOCATED
  •   ACQUIRED
  •   RUNNING
  •   COMPLETED
  •   EXPIRED
  •   RELEASED
  •   KILLED

RMNodeImpl的全部状态 NodeState


  •   NEW
  •   RUNNING
  •   UNHEALTHY
  •   DECOMMISSIONED,
  •   LOST
  •   REBOOTED
  •   DECOMMISSIONING
  •   SHUTDOWN

 

 

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>