YARN基本框架

YARN作为资源管理器,任务调度的一个框架,主要包含三大模块,即ResourceManager(RM),NodeManager(NM),AplicationMaster(AM),今天我们介绍ResourceManager。

1.ResourceManager

ResourceManager全局负责所有资源的监控,分配和管理。ResourceManager只接受资源汇报,对于具体的资源处理则交给NodeManager自己处理(按照ResourceManager分配资源的大小NodeManager启动Container)。YARN中NodeManager通过心跳线的方式定期向ResourceManager汇报本机的资源使用状况。ResourceManager对整体资源有一个整体的视图,当有应用程序提交任务请求时,ResourceManager会按照一定的策略分配给应用。按照组件向外提供不同对象提供服务,我们进行分组:客户端,NodeManager,ApplicationMaster和其他内部核心组件

1)客户端和ResourceManger交互
- ClientService
这个服务实现了基本的客户端到ResourceManager的接口ApplicationClientProtocol。该组件处理所有来自客户端到ResourceManager的远程过程调用(RPC)通信:
1.应用程序提交。
2.应用程序终止。
3.获取应用程序,队列,集群统计,用户ACL及更多的消息。
- AdministrationService
ClientService是福泽处理一般用户应用程序的提交和终止,另外还有一些YARN集群的管理器经常要执行的。为确保管理员的请求不会被一般用户的请求饿死,提供了高优先级的操作命令,给所有的管理员操作服务提供了一个分离的接口,叫做AdministrationService。ResourceManagerAdministrationProcotol是该组件实现的通信协议。重要功能如下:
1.刷新队列:例如新队列,停止已有的队列,以及重新配置队列的属性。
2.刷新ResourceManager处理的节点列表:例如增加新安装的节点或者因各种原因退役现存的节点。
3.添加新用户组,添加/更新管理员的ACL等等。
- Application ACL Manager
管理每个应用程序的ACL

2)ApplicationMaster和ResourceManager的通信
一旦应用程序通过ResourceManager中的面向客户端的服务,进入系统,他穿过ResourceManager内部负责拉起ApplicationMaster的状态机。
- ApplicationMasterService
该组件响应来自所有ApplicationMaster的请求。它实现了ApplicationMasterProtocol协议,它负责以下任务:
1.注册新的ApplicationMaster。
2.来自任意正在结束的ApplicationMaster的终止/取消注册请求。
3.认证来自不同ApplicationMaster的所有请求,确保只有合法的ApplicationMaster发送的请求传递给ResouceManager中的应用程序对象。
4.获取来自所有运行Application的Container的分配和释放请求,异步转发给YARN的调度器。
AM的启动,注册,运行状态监控都需要RM的参与,关系如下图:
YARN基本框架_第1张图片
上图描述的6个步骤解释如下:
步骤1.ApplicationMasterLauncher与对应的NodeManager联系,启动ApplicationMaster。
步骤2.ApplicationMasterLivenessMonitor添加监控列表,启动对ApplicationMaster的监控列表,启动对ApplicationMaster的监控。
步骤3.ApplicationMaster启动后,向ApplicationMasterService注册,公布自己的URL,访问接口等。
步骤4.ApplicationMaster定期向ApplicationMasterService发送心跳,及时更新自己的信息,便于RM进行管理。
步骤5.当application job执行完毕后,ApplicationMaster向ApplicationMaster Service报告执行完成。
步骤6.ApplicationMaster Service 通知ApplicationMasterLivenessMonitor从监控列表中删除ApplicationMaster,释放资源
- ApplicationMaster存活监控
帮助管理活跃的及死的/不响应ApplicationMaster

3)NodeManager和ResourceManager的通信
- Resource Tracker Service
NodeManager周期性的发送心跳到ResourceManager,ResourceManager的足记该组件负责响应来自所有NodeManager的这些RPC。它负责以下任务:
1.注册新的NodeManager。
2.接受以前NodeManager的心跳。
3.确保只有合法的NodeManager可以和ResourceManager通信,拒绝其他不合法的NodeManager。
- NodeManager存活监控
跟踪活跃的NodeManager和确定已死去的NodeManager。
- Node-List Manager
Node-List Manager是在NodeManager内存中的一个集合,包括有效的节点和被排除的节点。

4)ResourceManager核心组件
上面叙述了ResourceManager和外部通信的不同组件,下面我们将它们绑定在一起来展示ResourceManager核心的组件。
- ApplicationManager
ApplicationManager负责管理已提交的应用程序的集合。在应用程序提交后,首先检查应用程序的规格,拒绝0 ApplicationMaster资源请求不合法的应用程序。然后确定没有其他已提交的应用程序已经使用了相同的ID–这个场景可以由一个错误或者恶意的客户端造成。最后把通过检查的应用程序转给调度器(Schedule)。该组件还负责记录和管理已结束的应用程序。
- ApplicationMaster Launcher
在YARN中,应用程序执行实际任务所需要的Container是由Application发起的。ApplicationMaster本身的Container(ApplicationMaster也是由一个Container包装的)是由ResourceManager申请,并在NodeManager上准备和发起的。该组件维护一个线程池来设置环境,且和NodeManager通信来发起新提交应用程序的ApplicationMaster。
- YARNScheduler
YARN调度器负责给正在运行的应用程序分配资源。它基于应用程序的资源需求来执行调度功能,这些资源可能包括内存,CPU,磁盘以及网络需求等。
- ContainerAllocationExpirer
该组建负责确保所有分配的Container最终被ApplicationMaster使用,并在NodeMannager上启动。这里 需要注意一点,ApplicationMaster有可能拿到Container后并不是立刻使用,这样会造成资源利用率的降低,浪费集群资源。这时候ContainerAllocationExpirer包含了一个已分配但还没有在相应NodeManager上启动的Container的列表。对任意的Container,在一个配置的时间间隔(默认是10分钟),如果相应的NodeManager没有报告给ResourceManager该Container已经运行了,在ResourceManager中该容器被当做死亡的且超时。

2.NodeManager

YARN每台机器都会运行一个NodeManager,它相当于管理这个机器的代理,负责本台机器的程序运行,并对本机资源进行管理和监控。每个NodeManager负责定时地向ResourceManager汇报本节点上的资源使用情况和Container的运行情况。在紧急情况下,如果ResouceManager出现了宕机,那么NodeManager会立即连接备用RM。NodeManager通过RPC Service与ResourceManager和ApplicationMaster等其他组件进行交互。此外,NodeManager是执行应用程序的容器,当某个application job启动时,在NodeManager中的CotainerManager组件会触发MLauncherEventType.LAUNCH事件,并被ResourceManager中ApplicationMasterLauncher捕获,之后创建一个AMlauncher对象,接着AMlauncher对象会调用AMLauncher.launch()函数,在AMLauncher.launch()函数内部会调用CotainerManager.startContainer()函数来启动该Container。

3.ApplicationMaster

当一个应用程序通过Client提交到ResourceManager,ResourceManager会请求资源,分配一个Container资源,通知NodeManager启动ApplicationMaster,启动成功后ApplicationMaster向ResourceManager注册。ApplicationMaster根据任务向ResourceManager请求Container执行实际的工作。将分配的Container告知NodeManager来启动以便ApplicationMaster使用。任务执行和计算是在Container中进行,这些Container将与ApplicationMaster(注意:不是ResourceManager通信)。保持通信,并告知任务过程。当应用程序完成后,Container被停止,ApplicationMaster从ResourceManager中注销。
一旦ApplicationMaster成功启动后,ApplicationMaster将负责以下任务:
- 初始化向ResourceManager报告自己活跃信息的进程。
- 计算应用程序的资源需求。
- 将需求转换为YARN调度器可以理解的RequestRequest
- 与调度器协商申请资源
- 与NodeManager合作使用分配的Container
- 跟踪正在运行的Container的状态,监控它们的进程。
- 对Container或节点失败的情况进行处理,在必要的情况下重新申请资源。

你可能感兴趣的:(yarn,yarn,框架,任务调度)