8.2 MapReduce V2主要思想和架构

鉴于MapReduce V2的设计需求和MapReduce V1中凸显的问题,特别是JobTracker单点瓶颈问题(此问题影响着Hadoop集群的可靠性、可用性和扩展性),MapReduce V2的主要设计思路是将JobTracker承担的两大块任务—集群资源管理和作业管理进行分离,(其中分离出来的集群资源管理由全局的资源管理器(ResourceManager)管理,分离出来的作业管理由针对每个作业的应用主体(ApplicationMaster)管理),然后TaskTracker演化成节点管理器(NodeManager)。这样全局的资源管理器和局部的节点管理器就组成了数据计算框架,其中资源管理器将成为整个集群中资源最终分配者。针对作业的应用主体就成为具体的框架库,负责两个任务:与资源管理器通信获取资源,与节点服务器配合完成节点的Task任务。图8-1是MapReduce V2的结构图。

8.2 MapReduce V2主要思想和架构 - 图1

图 8-1 MapReduce V2结构图

(1)资源管理器

根据功能不同将资源管理器分成两个组件:调度器(Scheduler)和应用管理器(ApplicationManager)。调度器根据集群中容量、队列和资源等限制,将资源分配给各个正在运行的应用。虽然被称为调度器,但是它仅负责资源的分配,而不负责监控各个应用的执行情况和任务失败、应用失败或硬件失败时的重启任务。调度器根据各个应用的资源需求和集群各个节点的资源容器(Resource Container,是集群节点将自身内存、CPU、磁盘等资源封装在一起的抽象概念)进行调度。应用管理器负责接收作业,协商获取第一个资源容器用于执行应用的任务主题并为重启失败的应用主题分配容器。

(2)节点管理器

节点管理器是每个结点的框架代理。它负责启动应用的容器,监控容器的资源使用(包括CPU、内存、硬盘和网络带宽等),并把这些用信息汇报给调度器。应用对应的应用主体负责通过协商从调度器处获取资源容器,并跟踪这些容器的状态和应用执行的情况。

8.2 MapReduce V2主要思想和架构 - 图2

图 8-2 应用主体组件事件流

集群每个节点上都有一个节点管理器,它主要负责:

1)为应用启用调度器已分配给应用的容器;

2)保证已启用的容器不会使用超过分配的资源量;

3)为task构建容器环境,包括二进制可执行文件,jars等;

4)为所在的节点提供一个管理本地存储资源的简单服务。

应用程序可以继续使用本地存储资源,即使它没有从资源管理器处申请。比如:MapReduce可以利用这个服务存储Map Task的中间输出结果并将其shuffle给Reduce Task。

(3)应用主体

应用主体和应用是一一对应的。它主要有以下职责:

1)与调度器协商资源;

2)与节点管理器合作,在合适的容器中运行对应的组件task,并监控这些task执行;

3)如果container出现故障,应用主体会重新向调度器申请其他资源;

4)计算应用程序所需的资源量,并转化成调度器可识别的协议信息包;

5)在应用主体出现故障后,应用管理器会负责重启它,但由应用主体自己从之前保存的应用程序执行状态中恢复应用程序。

应用主体有以下组件(各个组件的功能可参考图8-2):

1)事件调度组件,是应用主体中各个组件的管理者,负责为其他组件生成事件。

2)容器分配组件,负责将Task的资源请求翻译成发送给调度器的应用主体的资源请求,并与资源管理器协商获取资源。

3)用户服务组件,将作业的状态、计数器、执行进度等信息反馈给Hadoop MapReduce的用户。

4)任务监听组件,负责接收Map或Reduce Task发送的心跳信息。

5)任务组件,负责接收Map和Reduce Task形成的心跳信息和状态更新信息。

6)容器启动组件,通过使节点管理器运行来负责容器的启动。

7)作业历史事件处理组件,将作业运行的历史事件写入HDFS。

8)作业组件,维护作业和组件的状态。

(4)资源容器

在MapReduce V2中,系统资源的组织形式是将节点上的可用资源分割,每一份通过封装组织成系统的一个资源单元,即Container(比如固定大小的内存分片、CPU核心数、网络带宽量和硬盘空间块等。在现在提出的MapReduce V2中,所谓资源是指内存资源,每个节点由多个512MB或1GB大小的内存容器组成)。而不是像MapReduce V1中那样,将资源组织成Map池和Reduce池。应用主体可以申请任意多个该内存整数倍大小的容器。由于将每个节点上的内存资源分割成了大小固定、地位相同的容器,这些内存容器就可以在任务执行中进行互换,从而提高利用率,避免了在MapReduce V1中作业在Reduce池上的瓶颈问题和缺乏资源互换的问题。资源容器的主要职责就是运行、保存或传输应用主体提交的作业或需要存储和传输的数据。