Yarn的基本架构与运行
概述
Yarn(Yet Another Resource Negotiator)资源协调者,它是Hadoop生态圈中的三大组件之一,主要负责资源的调度。它与其他的两个组件相互独立也就是Yarn可以运行在其他的文件系统之上,其他的计算框架也可以运行在Yarn上面。下图为它在生态圈中的地位。
Yarn的架构
Yarn主要是由ResourceManager,NodeManager,Container,ApplicationMaster等几个组件组成下面分别介绍他们。
ResourceManager(RM)
负责对各个NodeManager上的资源进行统一的调度与管理。给ApplicationMaster分配资源(Container)以及监控AM的运行状态。它本身是由两个组件构成,也就是资源调度器与应用程序管理器。
- 资源调度器(Scheduler)
根据队列与容量的限制条件给要运行的程序分配资源,分配的资源单位为Container,每个任务只能够使用自己对应Container中描述的资源。注意它只是根据程序的需求分配资源而不管其他的事情,不负责跟踪应用程序的状态,也不负责由于任务的各种原因需要的重启。
- 应用程序管理器(Applications Manager)
负责整个系统中所有应用程序的管理包括应用程序的提交,与调度器协商资源以启动AM。监控AM与Container的进度与状态。
NodeManager(NM)
NM是每个节点上的资源和任务的管理器。它会定时向RM汇报自己各个资源的使用情况。和各个Container的运行状态,同时接受AM的各个请求。
Container
它是Yarn中资源的抽象,它封装了某个节点上各个维度的资源。当AM向RM请求资源时RM会给AM分配的资源就是以Container来表示的。Yarn会给每一个任务分配一个Container,这个任务只能够使用该Container所描述的资源。
ApplicationMaster(AM)
它负责对某一个应用的监控,用户每提交一个应用程序都会包含一个AM,它负责向ResourceManager协调资源并且与NodeManager协同完成任务的执行与监控。
Yarn的运行流程
- 用户向Yarn中提交应用程序,由于一个AM管理着一个应用程序,所以我们就提供能够描述AM进程所需要的所有信息。其中包括启动AM的命令,命令参数,用户程序等等。
- RM为该应用程序分配第一个Container,并且与对应的NM通信要求它在这个Container中启动AM。
- AM首先向RM注册,这样用户就可以直接通过RM来查看程序的运行状态了。与此同时RM也会为各个任务申请资源并且监控它们的运行状态直到运行结束。
- AM采用RPC通信协议向RM申请资源,然后与NM进行通信要求它启动一个任务。
- NM为任务设置好运行环境,并且将任务启动命令写到一个脚本中,运行该脚本执行任务。
- 各个任务通过RPC通信协议来向AM汇报自己的情况,以便让AM随时掌握自己各个任务的状态从而可以在任务运行失败时重新启动任务。
- 应用程序完成后AM告诉RM注销并关闭自己
总体来说:一个进程对应一个AM,一个进程对应多个任务,一个任务享受一个Container。
JVM重用
在默认情况下每新产生一个Container对应的一个任务就会新启动一个虚拟机,任务完成之后然后再关闭虚拟机,不管这个任务是多么的小。这样就造成了JVM的浪费,因为我们完全有可能让多个小的任务跑在同一个JVM上。而JVM重用就解决了一个问题。
小任务的定义:通过向进程所用到map个数,reduce个数以及用到的文件块数设定一个阈值来规定小任务。具体的参数如下: