我对yarn的理解
Yarn是一种新的hadoop资源调度器。yarn的基本思想是将JobTracker的两个功能(资源管理和作业调度/监控)分离开来,主要的方法是创建一个全局的RM和若干个针对应用程序的AM。(应用程序指的是MR作业或者是作业的DAG)
Yarn的主要构件有:ResourceManager(RM),ApplicationMaster(AM),NodeManger(NM),container。接下来我先介绍一下他们各自的主要功能:
RM:主要负责资源的调度,负责启动和监控AM,在AM运行失败时重启它(RM不负责AM内部任务的容错,这由AM来完成)。RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:Scheduler(调度器)和ApplicationsManager(应用程序管理器,ASM)
Scheduler是一个资源调度器,它主要负责协调集群中各个应用的资源分配,保障整个集群的运行效率。Scheduler的角色是一个纯调度器,它只负责调度Containers,不会关心应用程序监控及其运行状态等信息。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务
另一个组件ApplicationManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。
AM:ApplicationMaster的主要作用是向ResourceManager的Scheduler申请资源(Container)并和NodeManager协同工作来运行应用的各个任务然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负责重启它。
NM:NodeManager进程运行在集群中的节点上,每个节点都会有自己的NodeManager。它负责接收ResourceManager的资源分配请求,分配具体的Container给应用。同时,它还负责监控并报告Container使用信息给ResourceManager。ResourceManager是一个全局的进程,而NodeManager只是每个节点上的进程,管理这个节点上的资源分配和监控运行节点的健康状态,当一个节点启动时,它会向ResourceManager进行注册并告知ResourceManager自己有多少资源可用。在运行期,通过NodeManager和ResourceManager协同工作,这些信息会不断被更新并保障整个集群发挥出最佳状态。NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。负责管理应用信息的组件是ApplicationMaster;另一方面它还接收并处理来自AM的Container启动/停止的各种请求。
Container:container是指节点上的系统资源,现阶段包括cpu以及内存(以后可能会增加磁盘和网络等资源),是yarn中任务执行的基本单位,也就是说任何一个job或application必须运行在一个或多个Container中,在Yarn框架中,ResourceManager只负责告诉ApplicationMaster哪些Containers可以用,ApplicationMaster还需要去找NodeManager请求分配具体的Container。
应用提交的过程分析:
1. 客户端程序向ResourceManager提交应用,并请求一个ApplicationMaster实例
2. ResourceManager找到可以运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例
3. ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了
4. 当Container被成功分配之后,ApplicationMaster通过向NodeManager发送信息(container-launch-specification)来启动Container( 该信息包含了能够让Container和ApplicationMaster交流所需要的资料)
5. 应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息发送给ApplicationMaster(通过application-specific协议)
6. 在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议
7. 一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统