深入解析yarn架构设计与技术实现-Resource Manager剖析1

ResourceManager总体架构

RM主要职责有4部分:

  • ResourceTracker: 与NodeManager通信并控制NM上的Container
  • ApplicationMasterProtocol: 管理ApplicationMaster
  • ApplicationClientProtocol: 与客户端交互,处理客户端的请求
  • 另外RM还负责资源管理和调度

resourceManager内部架构主要分为一下几块:

  • 用户交互模块
  • NM管理模块
  • AM管理模块
  • Application管理模块
  • 状态机管理模块
  • 安全管理模块
  • 资源分配模块

用户交互模块

用户交互模块分为ClientRMService和AdminService两部分。分开的原因主要是防止client用户过多导致admin需求被阻塞。

ClientRMService 继承了AbstractService并且实现了ApplicationClientProtocol接口。咱们来一次看Abstractservice和ApplicationClientProtocol需要实现的接口

serviceStart:设置并启动一个rpc.server并做了一次auth。

注:这里我犯了个傻,一直在找他到底那里设置了和protocol对应的实现。结果发现其实rpc.getServer的第二个参数就是protocol的实现,这里传的是this,ClientRMService他是实现了ApplicationClientProtocol。。。

另外再说一下getProxy吧。proxy至少我在RpcClientFactoryPBImpl中看他是直接通过拼一个pb的名字然后反射拿到这个类的,所以pb的protocol实现名字是很重要的,不能瞎起。。。

除了server,另一个重要的成员变量是rmAppManager,这是一个eventHandler,主要是将ClientRMService的各种操作异步的处理起来。而rmAppManager的dispatcher又在他的成员变量rmContext里,有点复杂,先这样吧。

AdminService和clientRMServie类似,只不过它实现的是ResourceManagerAdministrationProtocol这个rpc协议。

ApplicationMaster管理

applicationMaster主要由3个部分组成:ApplicationMasterLauncher,AMLivelinessMonitor和ApplicationMasterService。

ApplicationMasterLauncher既是一个服务又是一个事件handler:public class ApplicationMasterLauncher extends AbstractService implements EventHandler<AMLauncherEvent>. 这里再复习一遍:

  • 服务意味着他会实现serviceInit,serviceStart和serviceStop 3个函数。serviceStart启动了一个LauncherThread线程。这个线程负责从事件MasterEvents这个队列里取数据进行处理。
  • 而handler意味着要通过实现handle函数来对对应事件进行处理。这里的handle函数会把对应的RMAppAttempt application通过lunch函数或者cleanup函数变成一个runnable加入事件队列,launcherThread从队列取出这个runnable进行下一步处理。

ApplicaitionMasterService实现了RPC协议ApplicationMasterProtocol,来处理ApplicationMaster的请求,包括注册,心跳和清理三种。

AMLivilinessMonitor:周期性遍历所有应用的ApplicaitionMaster,并重启10分钟没响应的AM

RM管理一个AM的过程主要分为7步:

  1. 用户向RM提交应用程序,RM收到提交请求后,先向资源调度器申请用以启动AM的资源,得到资源后由ApplicationMasterLauncher与对应NM同行,启动AM
  2. AM启动后,ApplicationMasterLauncher会通过事件将刚启动的AM注册到AMLivelinessMonitor以监控心跳。(Launcher函数就是注册操作)
  3. AM向ApplicationMasterService注册自己,并周期性汇报
  4. AM周期性发送心跳给ApplicationMasterService
  5. ApplicationMasterService每次收到AM心跳后,,向AMLivelinessMonitor更新同步时间
  6. 应用程序结束后AM想ApplicationMasterService注销自己
  7. ApplicationMasterService通知AMLivelinessMonitor移除这个AM

160721 ApplicationMaster启动流程.jpeg

#NodeManager管理

  • NMLivelinessMonitor: 监控NodeManager的心跳。当一个node 10分钟没有联系时就认为他死掉了,所有在它上面的container被标记为失效。这个模块作用类似于AMLivelinessMonitor
  • NodesListManager: 管理node的黑名单和白名单
  • ResourceTrackerService: 实现了RPC协议ResourceTracker,负责处理NodeManager的请求,主要是注册和心跳两种请求。

本文采用创作共用保留署名-非商业-禁止演绎4.0国际许可证,欢迎转载,但转载请注明来自http://thousandhu.github.io,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:http://thousandhu.github.io/2016/07/24/深入解析yarn架构设计与技术实现-Resource-Manager剖析1/