《从0开始学大数据》之分布式集群资源调度框架 Yarn

Hadoop 主要是由三部分组成,分布式文件系统 HDFS、分布式计算框架 MapReduce,还有一个是分布式集群资源调度框架 Yarn。但是 Yarn 并不是随 Hadoop 的推出一开始就有的,Yarn 作为分布式集群的资源调度框架,它的出现伴随着 Hadoop 的发展,使 Hadoop 从一个单一的大数据计算引擎,成为一个集存储、计算、资源管理为一体的完整大数据平台,进而发展出自己的生态体系,成为大数据的代名词。

hadoop1中MapReduce 的架构的缺点

在 MapReduce 应用程序的启动过程中,最重要的就是要把 MapReduce 程序分发到大数据集群的服务器上,在 Hadoop 1 中,这个过程主要是通过 TaskTracker 和 JobTracker 通信来完成。

MapReduce的缺点

服务器集群资源调度管理和 MapReduce 执行过程耦合在一起,如果想在当前集群中运行其他计算任务,比如 Spark 或者 Storm,就无法统一使用集群中的资源了。

Yarn的出现

Yarn 是“Yet Another Resource Negotiator”的缩写,字面意思就是“另一种资源调度器”。

随着大数据技术的发展,各种新的计算框架不断出现,我们不可能为每一种计算框架部署一个服务器集群,而且就算能部署新集群,数据还是在原来集群的 HDFS 上。所以我们需要把 MapReduce 的资源管理和计算框架分开,这也是 Hadoop 2 最主要的变化,就是将 Yarn 从 MapReduce 中分离出来,成为一个独立的资源调度框架。

Yarn 的架构

极客时间《从0开始学大数据》
Yarn 包括两个部分:
一个是资源管理器(Resource Manager)
一个是节点管理器(Node Manager)

这也是 Yarn 的两种主要进程:ResourceManager 进程负责整个集群的资源调度管理,通常部署在独立的服务器上;NodeManager 进程负责具体服务器上的资源和任务管理,在集群的每一台计算服务器上都会启动,基本上跟 HDFS 的 DataNode 进程一起出现。

资源管理器(Resource Manager)

资源管理器又包括两个主要组件:调度器和应用程序管理器。

调度器其实就是一个资源分配算法,根据应用程序(Client)提交的资源申请和当前服务器集群的资源状况进行资源分配。Yarn 内置了几种资源调度算法,包括 Fair Scheduler、Capacity Scheduler 等,你也可以开发自己的资源调度算法供 Yarn 调用。
Yarn 进行资源分配的单位是容器(Container),每个容器包含了一定量的内存、CPU 等计算资源,默认配置下,每个容器包含一个 CPU 核心。容器由 NodeManager 进程启动和管理,NodeManger 进程会监控本节点上容器的运行状况并向 ResourceManger 进程汇报。

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

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 作为一个大数据资源调度框架,调度的是大数据计算引擎本身。它不像 MapReduce 或 Spark 编程,每个大数据应用开发者都需要根据需求开发自己的 MapReduce 程序或者 Spark 程序。而现在主流的大数据计算引擎所使用的 Yarn 模块,也早已被这些计算引擎的开发者做出来供我们使用了。作为普通的大数据开发者,我们几乎没有机会编写 Yarn 的相关程序。但是,这是否意味着只有大数据计算引擎的开发者需要基于 Yarn 开发,才需要理解 Yarn 的实现原理呢?恰恰相反,我认为理解 Yarn 的工作原理和架构,对于正确使用大数据技术,理解大数据的工作原理,是非常重要的。

思考题

Web 应用程序的服务层 Service 和数据持久层 DAO 也是上下层模块关系,你设计的 Service 层是否按照框架的一般架构方法,遵循依赖倒转原则?

来自极客时间精选留言,本思考题比较开放

大神1

实际项目开发中,要做到依赖倒置的方法,一般就是抽象出相应的接口的方法,不依赖具体。面向接口编程。

作者回复: 是的,但是更重要的是接口是高层需求的抽象,还是底层实现的抽象。这是依赖倒置的关键,面向接口本身并不能保证依赖倒置原则,否则和接口隔离原则没有区别。

大神2

通过这一节的复习,到这里为止,我们对Hadoop生态就有了一个全面的认识。包括HDFS分布式文件系统架构,MR计算框架,Yarn资源调度框架。

在大数据技术发展的过程中,多种计算框架的出现及数据存储在HDFS中,这样就伴随Yarn(Yet another resource negotiator)的出现。Yarn主要由资源管理器和节点管理器构成。资源管理器负责整个集群的资源调度管理。节点管理器负责对具体服务器的资源和任务管理。

在Yarn的整个工作流程中,首先向Yarn提交应用程序。RM和NM进行通信,分配容器,并在容器中启动MR ApplicationMaster。MR application向RM进行注册,为应用程序申请程序资源,MRAM与NM进行通信,将MR的程序分发到NM所在服务器中并在容器中运行。运行结束后进行注销容器资源。

在大数据技术中,HDFS称为系统,MR和YARN称为框架,遵循的原则是依赖倒转原则。高层模块不能依赖低层模块,它们通过依耐一个抽象,这个抽象由高层模块定义,由低层模块实现。在Java web 中,Tomcat,Spring MVC就相当于高层模块,具体写的程序就相当于底层代码。

该笔记摘录自极客时间课程
《从0开始学大数据》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值