yarn提交总结

来源:互联网 发布:linux反向解析域名 编辑:程序博客网 时间:2024/06/05 17:11

注:此记录仅做自己学习记录

yarn的resourceManager 是个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件
构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)

      1: 调度器根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序。需要注意的是,该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务;

     2:应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动    ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等

yarn 的NodeManager 是每个节点上的资源和任务管理器,一方面,它会定时地向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态;另一方面,它接收并处理来自 AM 的 Container启动 / 停止等各种请求。

Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container表示的。

yarn的提交过程简单的总结如下:

第一步:client 通过RPC 的applicationClientProcotol协议提交客户自己编码的应用程序到 resourceManager,

resourceManager 收到请求后,先向资源调度器申请用以启动 applicationMaster 的资源,待申请资源后,再有 applicationMasterLauncher 与对应的 nodeManger通信,启动 applicationMaster。刚启动的applicationMaster的时候

applicationMasterLauncher会通过事件机制把 applicationMaster 注册到 AMLivelinesMiontor 服务,启动心跳监测;

第二步:applicationMaster 启动后,会经过事件机制,再经过 rpc 向 resourceManager 的 applicationMasterService 进行注册,注册信息封装在 registerApplicationMasterRequest 类中,包括节点的host,rpc_port 和 application 的作业跟踪的webURL

第三步:applicationMaster 运行过程中,会周期的向applicationMasterService 汇报心跳;applicationMasterService接受到心跳会,再通知 resourceMaster 的 AMLivelinesMiontor 跟新心跳时间;

注:resourceManager 中有三个服务

     1:applicationMasterLauncher服务 

     1:AMLivelinesMiontor服务

     2:applicationMasterService 服务

第四步:applicationMaster 向resourceManager 申请资源,包括资源列表,资源量,资源优先级;

第五部:applicationMaster 申请到资源后,通过RPC函数 ContainerManagermentProtocol 与对应的nodeManager通信以启动container;

注:nodeManager 中也有三个服务

   1: NMLivelineMointor  服务 该服务遍历所有的nodeManager,检测 container 是否挂掉,若contanier挂掉,nodeManager不会重启 container ,只会通过rpc 告诉AM,让AM 决定是否重启

   2: nodeListManager 服务

   3: resourceTrackerManager 服务


第六部: 为了掌握container运行状态,ApplicationMaster要通过Rpc函数ContainerManagermentProtocol#getContainerStatus向nodeManger 询问 container的运行状态,一旦发现某个container运行失败后,applicationMaster可以尝试为对应的任务申请新的 资源

第七步:一旦一个container运行完成后,applicationMaster 可以通过rpc函数 让nodeMangaer释放container;

第八步:application 时刻检测作业是否完成,若完成;applicationMaster通过RPC函数 applicationMasterProtocol#finishApplicationMaster告诉resourceManager 运行程序接口



原创粉丝点击