Hadoop之YARN框架

目录

一、YARN简介

二、YARN背景

1.MRv1架构(Master/Slave主从结构)

2.MRv1架构缺陷

3.YARN诞生

三、YARN架构(Master/Slave结构)

1.核心组件

2.优势

四、YARN执行流程

1.客户端提交作业

2.与NM通信并分配Container启动其中AM

3.启动AM并向RM注册

4.注册后与NM通信分配Container启动其中Task

5.注销AM


一、YARN简介

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。它将资源管理和处理组件分开,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

二、YARN背景

YARN是Hadoop2.x才有的,所以在介绍YARN之前,我们先看一下MapReduce1.x时所存在的问题

1.MRv1架构(Master/Slave主从结构)

经典MapReduce最严重的限制:可伸缩性、资源利用、对不同工作负载的支持

在 MapReduce 框架中,作业执行受两种类型的进程控制:

(1)一个称为 JobTracker (资源管理、任务调度)的主要进程,它协调在集群上运行的所有作业,分配要在 TaskTracker 上运行的 map 和 reduce 任务。

(2)许多称为 TaskTracker 的下级进程,它们运行分配的任务并定期向 JobTracker 报告进度。

Hadoop之YARN框架

2.MRv1架构缺陷

(1)整个集群中只有一个JobTracker,就代表着会存在单点故障的情况

(2)JobTracker节点的压力很大,不仅要接收来自客户端的请求,还要接收大量TaskTracker节点的请求

(3)由于JobTracker是单节点,所以容易成为集群中的瓶颈,而且也不易域扩展

(4)JobTracker承载的职责过多,基本整个集群中的事情都是JobTracker来管理

(5)1.x版本的整个集群只支持MapReduce作业,其他例如Spark的作业就不支持了,由于1.x版本不支持其他框架的作业,所以导致我们需要根据不同的框架去搭建多个集群。这样就会导致资源利用率比较低以及运维成本过高,因为多个集群会导致服务环境比较复杂。

3.YARN诞生

正是因为在1.x中,有各种各样的问题,才使得YARN得以诞生,而YARN就可以令这些不同的框架运行在同一个集群上,并为它们调度资源。我们来看看Hadoop2.x的架构图:

Hadoop之YARN框架

在上图中,我们可以看到,集群最底层的是HDFS,在其之上的就是YARN层,而在YARN层上则是各种不同的计算框架。所以不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度,进而提高集群资源的利用率,这也就是所谓的 xxx on YARN。

为了解决可伸缩性问题,一个简单而又绝妙的想法应运而生:我们减少了单个 JobTracker 的职责,将部分职责委派给 TaskTracker,因为集群中有许多 TaskTracker。在新设计中,这个概念通过将 JobTracker 的双重职责(集群资源管理和任务协调)分开为两种不同类型的进程来反映。

不再拥有单个 JobTracker,一种新方法引入了一个集群管理器,活它惟一的职责就是跟踪集群中的动节点和可用资源,并将它们分配给任务。对于提交给集群的每个作业,会启动一个专用的、短暂的 JobTracker 来控制该作业中的任务的执行。有趣的是,短暂的 JobTracker 由在从属节点上运行的 TaskTracker 启动。因此,作业的生命周期的协调工作分散在集群中所有可用的机器上。得益于这种行为,更多工作可并行运行,可伸缩性得到了显著提高。

三、YARN架构(Master/Slave结构)

在 YARN 中,MapReduce 降级为一个分布式应用程序的一个角色(但仍是一个非常流行且有用的角色),现在称为 MRv2。MRv2 是经典 MapReduce 引擎(现在称为 MRv1)的重现,运行在 YARN 之上

Hadoop之YARN框架

1.核心组件

(1)ResourceManager(代替集群管理器), 简称RM,整个集群同一时间提供服务的RM只有一个,它负责集群资源的统一管理和调度。以及还需要处理客户端的请求,例如:提交作业或结束作业等。并且监控集群中的NM,一旦某个NM挂了,那么就需要将该NM上运行的任务告诉AM来如何进行处理。

(2)NodeManager(代替 TaskTracker), 简称NM,整个集群中会有多个NM,它主要负责自己本身节点的资源管理和使用,以及定时向RM汇报本节点的资源使用情况。接收并处理来自RM的各种命令,例如:启动Container。NM还需要处理来自AM的命令,例如:AM会告诉NM需要启动多少个Container来跑task。

(3)ApplicationMaster(代替一个专用且短暂的 JobTracker), 简称AM,每个应用程序都对应着一个AM。例如:MapReduce会对应一个、Spark会对应一个。它主要负责应用程序的管理,为应用程序向RM申请资源(Core、Memory),将资源分配给内部的task。AM需要与NM通信,以此来启动或停止task。task是运行在Container里面的,所以AM也是运行在Container里面。

(4)Container, 封装了CPU、Memory等资源的一个容器,相当于是一个任务运行环境的抽象。

(5)Client, 客户端,它可以提交作业、查询作业的运行进度以及结束作业。

2.优势

ResourceManager、NodeManager 和容器都不关心应用程序或任务的类型。所有特定于应用程序框架的代码都转移到它的 ApplicationMaster,以便任何分布式框架都可以受 YARN 支持 — 只要有人为它实现了相应的 ApplicationMaster。

得益于这个一般性的方法,Hadoop YARN 集群运行许多不同工作负载的梦想才得以实现。想像一下:数据中心中的一个 Hadoop 集群可运行 MapReduce、Giraph、Storm、Spark、Tez/Impala、MPI 等。

单一集群方法明显提供了大量优势,其中包括:

(1)更高的集群利用率,一个框架未使用的资源可由另一个框架使用

(2)更低的操作成本,因为只有一个 “包办一切的” 集群需要管理和调节

(3)更少的数据移动,无需在 Hadoop YARN 与在不同机器集群上运行的系统之间移动数据

管理单个集群还会得到一个更环保的数据处理解决方案。使用的数据中心空间更少,浪费的硅片更少,使用的电源更少,排放的碳更少,这只是因为我们在更小但更高效的 Hadoop 集群上运行同样的计算。

四、YARN执行流程

Hadoop之YARN框架

1.客户端提交作业

客户端向ResourceManager提交一个作业

2.与NM通信并分配Container启动其中AM

ResourceManager需要为这个作业分配一个Container。所以ResourceManager会与NodeManager进行通信,要求这个NodeManager启动一个Container。并要求它在这个Container中启动应用程序的ApplicationMaster

3.启动AM并向RM注册

ApplicationMaster启动完之后会与ResourceManager进行一个注册。这时候客户端就可以通过ResourceManager查询作业的运行情况了。

4.注册后与NM通信分配Container启动其中Task

然后ApplicationMaster还会到ResourceManager上申请作业所需要的资源,申请到以后就会到对应的NodeManager之上运行客户端所提交的作业,然后NodeManager就会把task运行在启动的Container里。

5.注销AM

应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。