
『大数据基础』08-集群调度:分布式集群资源调度框架Yarn(Hadoop 2)
一、Yarn的由来
前面提到,在Hadoop 1中MapReduce既是编程模型也是计算框架,它作为计算框架时,既包含了对服务器计算资源和计算过程的调度,也包含了map和reduce两个执行过程。这样带来了一个问题:服务器集群的资源调度管理和MapReduce执行过程严重耦合,使得当前集群只能运行MapReduce的计算任务,而无法运行诸如Spark或者Storm的计算任务。如果想要部署其他计算框架,就需要另外带有资源管理调度的功能,这个功能显然是冗余的。
(至于为什么需要支持其他计算框架?因为在大数据时代,数据才是根本,数据才是价值所在。一旦某个框架将数据限定只能给自身的计算框架使用,那这个框架将会迅速失去生命力,很快被其他更开放的框架替代)
所以Hadoop 2把MapReduce的资源管理和计算框架拆分开来,使得MapReduce成为一个纯粹的计算执行引擎专门负责执行map程序和reduce程序,资源管理功能拆分出来成为一个独立的资源调度框架Yarn(Yet Another Resource Negotiator)。
二、Yarn架构原理
(一)资源分配单元:容器
Yarn进行资源分配的单位是容器(Container),每个容器封装了一定的CPU、内存等计算资源,默认至少包含一个CPU核心。
(二)资源管理器 & 节点管理器
Yarn的管理面主要由两类进程控制:资源管理器(Resource Manager)和节点管理器(Node Manager)。
资源管理器部署在独立的服务器上,负责整个大数据集群的资源调度管理(全局的资源调度)。
节点管理器在集群每台服务器上都会启动,基本跟HDFS的DataNode进程一起出现,负责服务器本地的资源(容器)的监控和管理,向资源管理器报告容器状态(局部的资源调度)。PS:容器的生命周期由节点管理器实际直接控制。
(三)调度器 & 应用程序管理器
资源管理器主要包括两个组件:调度器和应用程序管理器。
调度器是一个资源调度算法,根据应用程序提交的资源申请和当前服务器集群的资源状况进行资源分配。Yarn内置了几种算法,Fair、Scheduler、Capacity Scheduler等。开发者也可以实现自己的资源调度算法给Yarn调用。
应用程序管理器负责应用程序的提交、监控程序运行状态等。每个应用程序启动后需要现在集群中运行一个自己的ApplicationMaster容器(在集群中申请了一个容器资源去运行应用程序管理器程序),由ApplicationMaster根据应用程序的资源需求再向资源管理器全局申请容器,得到容器后控制容器进行计算。
三、Yarn执行MapReduce工作流
客户端向Yarn提交MapReduce的大数据处理程序,包括ApplicationMaster、MapReduce程序、MapReduce Application启动命令。
Yarn接收到请求后,资源管理器访问集群中所有节点管理器,根据集群资源指示某个节点管理器为程序分配一个容器来运行ApplicationMaster。
ApplicationMaster启动后注册到资源管理器,向资源管理器申请必要的容器资源。资源管理器接受到ApplicationMaster的资源申请后为其全局分配集群资源。
ApplicationMaster申请到资源后,联系相应的节点管理器操作创建容器,将MapReduce程序分发到目标容器运行,MapReduce程序运行的就是map或reduce任务。
容器在运行期间直接和ApplicationMaster通信,运行结束后ApplicationMaster向资源管理器报告注销并释放资源。资源管理器通知节点管理器执行容器注销和释放的操作。
在这个过程中,ApplicationMaster充当了Hadoop 1的MapReduce运行机制里JobTracker进程的角色,申请的容器则充当了TaskTracker进程的角色。
四、Yarn怎么执行其他计算框架
Yarn作为一个分布式资源调度框架,为计算框架提供了一套接口规范(ApplicationMaster)。各种计算框架只要实现该规范就可以被Yarn统一地调度执行。如果运行MapReduce计算框架,就开发遵循Yarn规范的MapReduce ApplicationMaster;如果运行Spark计算框架,就开发遵循Yarn规范的Spark ApplicationMaster。这样就实现了调度和计算的解耦。
(整理自《大数据技术架构:核心原理与技术实践》)