关于Yarn-值得你看完的一篇文章

Yarn的诞生

MapReduce1.x存在的问题 : 单点故障以及节点压力不易扩散等等, 这也就直接催生了Yarn的诞生

Yarn的主要作用: 在不同的计算框架下,可以在同一个HDFS集群的数据中享受整体的资源调度,按资源需要进行分配,进而提高了集群资源的利用率!

  1. Yet Another Resource Ngotiator(另一种资源协调者)
  2. 通用资源管理系统
  3. 为上层应用提供统一的资源调度管理
    在这里插入图片描述

Hadoop Yarn(上图)架构原理剖析

一 . Container (容器)
Container这个容器是yarn在资源处理上的一层抽象概念.
在这里插入图片描述
如上图所示,Yarn将自身机器的CPU核数,内存等计算机资源都封装成一个小小的容器(Container):

  • Container(容器)有NodeManager启动和管理,并被其监视
  • Container(容器)被ResourceManager进行调度

二 . Yarn的三个主要组件

组成Yarn的三个主要组件是 : ResourceManager , NodeManager , ApplicationMaster

1. ResourceManager(RM资源管理器) :
负责对各个NodeManager上的资源进行统一调度和管理,整个系统只有一个RM ,RM包含两个主要组件: SchedulerApplications Manager

  • (1) Scheduler (调度程序) : 从本质上说这是一种算法. 当Client提交任务时,它会跟据需要调度的资源结合当前集群的资源情况进行分配 . 注意 , 他只负责向应用程序进行资源分配,并不做监控或者跟踪状态等工作
  • (2) Applications Manager (AM 应用程序管理器): 负责管理Client提交的应用并且对应用进行监控等工作

明白了资源管理器ResourceManager,那么应用程序如何申请资源,用完如何释放?这就是ApplicationMaster的责任了。

2. ApplicationsMaster(应用程序主控):

  • 每当用户Client提交一个Application(应用程序)的时候,就会新建一个ApplicationMaster,由它去与ResourceManager申请容器资源,获得资源以后会把要运行的程序发送到容器上启动,然后进行分布式计算

  • 这里可能有些难以理解,为什么是把运行程序发送到容器上去运行?如果以传统的思路来看,是程序运行着不动,然后数据进进出出不停流转。但当数据量大的时候就没法这么玩了,因为海量数据移动成本太大,时间太长。但是中国有一句老话山不过来,我就过去。大数据分布式计算就是这种思想,既然大数据难以移动,那我就把容易移动的应用程序发布到各个节点进行计算呗,这就是大数据分布式计算的思路

  • 那么最后,资源有了,应用程序也有了,那么该怎么管理应用程序在每个节点上的计算呢?别急,我们还有一个NodeManager

3. NodeManager(NM节点管理器) :

相比起上面两个组件的掌控全局,NM就显得比较细微了。NM是ResourceManager在每台机器的上代理,主要工作是负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),并且它会定期向ResourceManager/Scheduler提供这些资源使用报告,再由ResourceManager决定对节点的资源进行何种操作(分配,回收等)。

三 . 提交一个Application到yarn 的流程
在这里插入图片描述

  1. Client向Yarn提交Application,这里我们假设是一个MapReduce作业。
  2. ResourceManager向NodeManager通信,为该Application分配第一个容器。并在这个容器中运行这个应用程序对应的ApplicationMaster。
  3. ApplicationMaster启动以后,对作业(也就是Application)进行拆分,拆分task出来,这些task可以运行在一个或多个容器中。然后向ResourceManager申请要运行程序的容器,并定时向ResourceManager发送心跳。
  4. 申请到容器后,ApplicationMaster会去和容器对应的NodeManager通信,而后将作业分发到对应的NodeManager中的容器去运行,这里会将拆分后的MapReduce进行分发,对应容器中运行的可能是Map任务,也可能是Reduce任务。
  5. 容器中运行的任务会向ApplicationMaster发送心跳,汇报自身情况。当程序运行完成后,ApplicationMaster再向ResourceManager注销并释放容器资源。

最后我们聊聊为什么会有Hadoop Yarn框架的出现?

最直接的原因就是Hadoop1.x中框架的缺陷, 在MapReduce中,jobTracker 负责接受任务,同时负责资源调度,以及监控TaskTracker运行情况,所以也就很容易出现单点故障的问题 . 所以也就出现了Yarn,其实Hadoop能有今天的地位,Yarn可以说是功不可没。因为有了Yarn,更多计算框架可以接入到Hdfs中,而不单单是MapReduce,到现在我们都知道,MapReduce早已经被Spark等计算框架赶超,而HDFS却依然屹立不倒。究其原因,正式因为Yarn的包容性,使得其他计算框架能专注于计算性能的提升。Hdfs可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统,Yarn功不可没。