MapReduce已经进行了全新升级,即Hadoop 2.0,升级后的版本经常被称为MapReduce 2.0(MR v2)或者YARN。本书中常常提到其版本号2.x,虽然发行版本小数点后面的数字有变化,但是系统架构或者其运行方式并不会发生根本的变化。
MR v2是一套应用编程接口(API),该接口兼容MR v1,根据MR v1接口编写的程序仅需重新编译即可。Hadoop 2.x系统的底层架构已经完全改变了,Hadoop 1.x中的作业调度器承担两个主要功能:
资源管理(Resource management)
作业调度/作业监控(Job scheduling/job monitoring)
YARN把这两个功能分为两个守护进程来分别承担。这样的设计使得系统有一个全局的资源管理器以及每个程序有一个应用程序管理器(Application Master)。注意,我们这里提到了程序(application),而不是作业(job)。在新的Hadoop 2.x系统中,一个程序(application)既可以指传统概念上的一个单独的MapReduce作业,也可以指一系列作业组成的有向无环图(Directed Acyclic Graph,DAG)。DAG是一个由许多节点相连构成的图,图中没有循环。也就是说,无论使用什么样的方法来遍历这张图,你都不可能遇到已经在遍历过程中经过的节点。用简单明了的话说就是,多个作业组成了有向无环图就意味着这些作业之间存在着层属关系(hierarchical relationship)。
YARN还使得Hadoop的功用不仅仅局限于MapReduce。在后续章节中,我们会发现MapReduce框架存在着诸多局限。新的框架已经开始突破这些局限。举个例子,Apache Hive给Hadoop系统带来了SQL特性,Apache PIG可以让用户使用基于脚本的数据流方式在Hadoop系统中处理数据。像HAMA这样的新框架使得Hadoop系统更加适合迭代计算,这在机器学习这样的应用场景中非常有用。
来自Berkley的Spark/Shark框架是Hive 和 HAMA的结合,提供了低延时的SQL访问和一些内存计算能力。这些框架都是运行在HDFS之上的,Hadoop系统不能仅仅只支持其中的某一种。对框架重新设计是非常必需的,以使得基于海量数据批处理计算框架(不仅限于MapReduce模型),基于HAMA的数据整体同步并行计算(BSP)框架或者基于Shark/Spark的内存缓存和计算框架都能运行在统一的Hadoop系统之上。
经过重新设计的新框架可以使得整个Hadoop系统对其提供一致的原生支持。这会使得关于安全和资源管理的系统级策略能以一致的方式应用,所有系统都共享相同的底层HDFS。
YARN系统由以下几个组成部分:
全局资源管理器(Global Resource Manager)
节点管理器(Node Manager)
针对每种应用程序的应用程序管理器(Application-specific Application Master)
调度器(Scheduler)
容器(Container)
一部分CPU内核和一部分内存构成了一个容器。一个应用程序(application)运行在一组容器中。应用程序管理器的一个实例会向全局资源管理器请求获取资源。调度器会通过每个节点的节点管理器(Node Manager)来分配资源(容器)。节点管理器会向全局资源管理器汇报每个容器的使用情况。
全局资源管理器和每个节点的节点管理器构成了新MapReduce框架的管理系统。全局资源管理器全权负责系统资源的分配。每种应用程序都有一个应用程序管理器。(比如,MapReduce是一种应用程序,每个MapReduce作业是MapReduce类型程序的一个实例,就像面向对象编程中的类和对象之间的关系一样)。针对同一应用程序类型的所有应用程序,一个应用程序管理器实例被初始化。应用程序管理器实例(instance)向全局资源管理器协商获得容器来运行作业。全局资源管理器利用调度器(全局组件)与每个节点的节点管理器的沟通结果来分配资源。从系统角度来看,应用程序管理器也是运行在一个容器之中的。
YARN全局架构如图2-6所示。
为了确保对已经存在的MapReduce程序的向后兼容,对MapReduce v1框架进行了重用,并没有做任何重大的修改。
我们来更详细地讲解YARN中的每个组件。从整体上来说,我们在一群商用服务器上搭建了Hadoop集群,每台服务器称为一个节点。