四、Yarn

刚开始MapReduce框架是包含 MapReduce和资源调度的,也就是说 MapReduce与资源调度耦合在一起。随着大数据的发展,Hadoop2将MapReduce中关于资源调度的内容分离了出来,并做成了一个独立的分布式集群的资源调度框架,也就是Yarn。从此Hadoop 也从一个单一的大数据计算引擎,成为一个集存储、计算、资源管理为一体的完整大数据平台,进而发展出自己的生态体系,成为大数据的代名词。

现在几乎所有计算框架都可以部署一个hadoop服务器集群上,通过Yarn统一管理调度。如果想在当前集群中运行其他计算任务,比如 Spark 或者 Storm,也可以统一使用集群中的资源了。

Yarn的重要组成

Yarn.png

Yarn包括两个重要进程:资源管理器(Resource Manager)与 节点管理器(Node Manager),他们也是一主多从的关系。

ResourceManager

ResourceManager 进程负责整个集群的资源调度管理,通常部署在独立的服务器上。
资源管理器又包括两个主要组件:调度器(Dispatcher)和应用程序管理器

调度器
调度器其实就是一个资源分配算法,根据应用程序(Client)提交的资源申请和当前服务器集群的资源状况进行资源分配。Yarn 内置了几种资源调度算法,包括 Fair Scheduler、Capacity Scheduler 等,你也可以开发自己的资源调度算法供 Yarn 调用。

应用程序管理器
应用程序管理器负责应用程序的提交、监控应用程序运行状态等。

NodeManager

NodeManager 进程负责具体服务器上的资源和任务管理,在集群的每一台计算服务器上都会启动,基本上跟 HDFS 的 DataNode 进程一起出现。

容器(Container)

Yarn 进行资源分配的单位是容器(Container),每个容器包含了一定量的内存、CPU 等计算资源,默认配置下,每个容器包含一个 CPU 核心。容器由 NodeManager 进程启动和管理,NodeManger 进程会监控本节点上容器的运行状况并向 ResourceManger 进程汇报。

Yarn的工作流程

应用程序管理器负责应用程序的提交、监控应用程序运行状态等。应用程序启动后需要在集群中运行一个 ApplicationMaster,ApplicationMaster 也需要运行在容器里面。每个应用程序启动后都会先启动自己的 ApplicationMaster,由 ApplicationMaster 根据应用程序的资源需求进一步向 ResourceManager 进程申请容器资源,得到容器以后就会分发自己的应用程序代码到容器上启动,进而开始分布式计算。

我们以一个 MapReduce 程序为例,来看一下 Yarn 的整个工作流程。

  1. 我们向 Yarn 提交应用程序,包括 MapReduce ApplicationMaster、我们的 MapReduce 程序,以及 MapReduce Application 启动命令。

2.ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个容器,并将 MapReduce ApplicationMaster 分发到这个容器上面,并在容器里面启动 MapReduce ApplicationMaster。

3.MapReduce ApplicationMaster 启动后立即向 ResourceManager 进程注册,并为自己的应用程序申请容器资源。

4.MapReduce ApplicationMaster 申请到需要的容器后,立即和相应的 NodeManager 进程通信,将用户 MapReduce 程序分发到 NodeManager 进程所在服务器,并在容器中运行,运行的就是 Map 或者 Reduce 任务。

5.Map 或者 Reduce 任务在运行期和 MapReduce ApplicationMaster 通信,汇报自己的运行状态,如果运行结束,MapReduce ApplicationMaster 向 ResourceManager 进程注销并释放所有的容器资源。

Yarn 为什么是框架

细心的你可能会发现,我们管 HDFS 叫分布式文件系统,管 MapReduce 叫分布式计算框架,管 Yarn 叫分布式集群资源调度框架。为什么 HDFS 是系统,而 MapReduce 和 Yarn 则是框架?
框架在架构设计上遵循一个重要的设计原则叫“依赖倒转原则”,依赖倒转原则是高层模块不能依赖低层模块,它们应该共同依赖一个抽象,这个抽象由高层模块定义,由低层模块实现。所谓高层模块和低层模块的划分,简单说来就是在调用链上,处于前面的是高层,后面的是低层。

MapReduce 如果想在 Yarn 上运行,就需要开发遵循 Yarn 规范的 MapReduce ApplicationMaster,相应地,其他大数据计算框架也可以开发遵循 Yarn 规范的 ApplicationMaster,这样在一个 Yarn 集群中就可以同时并发执行各种不同的大数据计算框架,实现资源的统一调度管理。

Yarn 作为一个大数据资源调度框架,调度的是大数据计算引擎本身。它不像 MapReduce 或 Spark 编程,每个大数据应用开发者都需要根据需求开发自己的 MapReduce 程序或者 Spark 程序。现在主流的大数据计算引擎所使用的 Yarn 模块,也早已被这些计算引擎的开发者做出来供我们使用了。作为普通的大数据开发者,我们也几乎没有机会编写 Yarn 的相关程序。虽然不用编码了,但在云计算的时代,一切资源都是动态管理的,理解这种动态管理的原理对于理解云计算也非常重要。Yarn 作为一个大数据平台的资源管理框架,简化了应用场景,对于帮助我们理解云计算的资源管理也很有帮助。

你可能感兴趣的:(四、Yarn)