YARN简介
目录
引入YARN
概念
核心组件
工作流程(以MR为例)
引入YARN
在Hadoop1.0中,资源管理与计算框架强耦合,即mapreduce同时要做计算和集群的资源管理两件事,这就导致几个问题:
1.只能运行mapreduce程序,无法运行其他高效计算框架(如spark);
2.资源分配是预先固定的,任务即使闲着也会不释放,总有资源在浪费;
3.当集群节点超过 4000 个时,JobTracker(资源管理和任务调度的核心组件)会成为性能瓶颈。
资源管理:如何分配硬件资源(如CPU、内存)
任务调度:如何将任务分配到拿到的资源上并监控任务
要解决这些问题,就需要将资源管理和任务调度分开来,并且调整资源分配的策略,而YARN就做到了这些点。
概念
①YARN全称Yet Another Resource Negotiator(又一个资源协调者)。它是Hadoop生态中的资源管理和任务调度平台。可以把它理解为大数据集群的“操作系统”。
②用于统一管理集群的计算资源,并为各类分布式应用分配资源、调度任务。
③遵循主从架构
核心组件

ResourceManager(全局管理者)
主节点,整个集群资源的老大,有两个组件:
①Scheduler(调度器)
只做资源分配。
根据容量、队列等约束条件,将资源分配给各个正在运行的应用程序。
常见的调度策略:默认Capacity Scheduler(将资源划分为多个队列,每个队列有保证的容量,队列内部可以采用 FIFO 或 DRF 等策略)、FIFO(先进先出)、Fair Scheduler(公平调度)
②ApplicationManager(应用程序管理器)
负责管理整个集群中所有应用程序的ApplicationMaster。
接受作业提交,为每个应用程序启动第一个 Container(用来运行 ApplicationMaster),并在 ApplicationMaster 失败时重启它。
NodeManager(单机管理者)
从节点,每个工作节点的代理。
负责启动和管理节点上的Container;定期向RM汇报本节点的资源使用资源使用情况;接收并处理来自RM和ApplicationMaster的命令,如启动或停止Container
ApplicationMaster(应用程序管理者)
最核心的概念。每个提交到YARN的应用程序都有专属于自己的ApplicationMaster。
向ResourceManager的Scheduler申请运行任务所需的资源(Container);与NM通信,在获得的Container中启动和停止具体的计算任务;监控本应用程序内所有任务的状态,在任务失败时重新申请资源以重启任务;向客户端和RM报告应用程序的进度和状态。
Container(容器)
是YARN中对资源的封装。它指定了一个节点上的一定量的资源集合,主要是CPU核心数和内存大小。
所有应用程序的任务(包括ApplicationMaster)都必须在Container中运行;可以想象成一个虚拟机,为任务提供了独立的、受保障的运行环境。
工作流程(以MR为例)

1.客户端向YARN集群提交一个mapreduce程序,ResourceManager的ApplicationsManager接收请求;
2.ApplicationsManager找到一个合适的NodeManager,命令它在第一个Container中启动程序的ApplicationMaster(图中的MR APP Mstr);
3.ApplicationsMaster启动后向RM注册自己,这样客户端就可通过RM查询到它的状态;
4.ApplicationsMaster根据程序的需求,向ResourceScheduler申请相应数量和规格的Container,RS根据集群的资源和调度策略,为ApplicationsMaster分配可用的Container;
5.ApplicationsMaster与分配了Container的NodeManager通信;
6.通信成功后,ApplicationsMaster指示它们启动Container,在每个Container中,NodeManager启动具体的任务,如图中的Reduce Task、Map Task;
7.任务运行中,会向ApplicationsMaster报告进度和状态,ApplicationsMaster持续监控所有任务,如果一个任务失败,它会重新向RM申请资源,然后在新的Container中重新运行该任务;
8.当所有程序的所有任务都完成后,ApplicationsMaster向RM注销并自行关闭。它使用的Container被释放,资源归还给集群。
