Yet Another Resource Negotiator
Apache Hadoop YARN 是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
架构
ResourceManager(RM)
全局的资源管理器,整个集群只有一个,负责集群资源的统一管理和调度分配。
主要接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。
NodeManager(NM)
整个集群有多个,负责单节点资源管理和使用
主要是节点上的资源管理,启动Container运行task计算,上报资源、container情况给RM和任务处理情况给AM。
NodeManager管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。
定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态。
ApplicationMaster(AM)
管理一个在YARN 内运行的应用程序的每个实例
主要是单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launch Container指令,接收NM的task处理状态信息。
Container
YARN中的资源抽象,封装某个节点上多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM向AM返回的资源便是用Container表示的。
YARN 会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。
对任务运行环境的抽象,描述一系列信息, 任务运行资源(节点、内存、CPU),任务启动命令,任务运行环境
Job工作流程
- client submit一个job到RM,进入RM中的Scheduler队列供调度
- RM根据NM汇报的资源情况(NM会定时汇报资源和container使用情况),请求一个合适的NM launch container,以启动运行AM
- AM启动后,注册到RM上,以使client可以查到AM的信息,便于client直接和AM通信
- AM启动后,根据Job 相关的split的task情况,会和RM协商申请container资源
- RM分配给AM container资源后,根据container的信息,向对应的NM 请求launch container
- NM启动container运行task,运行过程中向AM汇报进度状态信息,类似于MRv1中 task的汇报;同时NM也会定时的向RM汇报container的使用情况。
- 在application(job)执行过程中,client可以和AM通信,获取application相关的进度和状态信息。
- 在application(job)完成后,AM通知RM clear自己的相关信息,并关闭,释放自己占用的container。
YARN优势
更快地MapReduce计算
YARN利用异步模型对MapReduce框架的一些关键逻辑结构(如JobInprogress、TaskInProgress等)进行了重写,相比于MRv1,具有更快地计算速度。
对多框架支持
YARN不再是一个单纯的计算框架,而是一个框架管理器,用户可以将各种各样的计算框架移植到YARN之上。
框架升级更容易
在YARN中,各种计算框架不再是作为一个服务部署到集群的各个节点上(比如MapReduce框架,不再需要部署JobTracler、TaskTracker等服务),而是被封装成一个用户程序库(lib)存放在客户端,当需要对计算框架进行升级时,只需升级用户程序库即可。