MapReduce 1.x 及 2.x 架构解读

MapReduce 1.x 架构

这里写图片描述
MapReduce 1.x 采用 Master/Slave 架构,由全局唯一的 Jobtracker 和多个 TaskTacker 组成,并且在Client中提供一系列的api供编程和管理使用。其中各个组件的作用是:

1. JobTracker

全局唯一,主要负责集群资源监控和作业调度。JobTracker会对集群中所有的TaskTracker进行监控,一旦TaskTracker出现宕机、失败等情况,JobTracker中的调度器会将原来在这个TaskTracker上面执行的任务转移到其他的节点上面继续执行。当有新的作业进入到集群中时,调度器会根据资源的使用情况合理的分配这些作业。并且JobTracker中的调度器是可以插拔的,这意味着用户可以根据自己的需要,自定义作业和集群的调度方法。但是JobTracker存在单点故障的问题,一旦JobTracker所在的机器宕机,那么集群就无法正常工作。这也是 MapReduce 2.x 所要解决的主要问题之一。

2. TaskTracker

TaskTracker使用 “slot” 对本节点的资源(cpu、内存、磁盘等)进行划分,负责具体的作业执行工作。TaskTracker需要周期性向JobTracker汇报本节点的心跳信息,包括自身运行情况、作业执行情况等,JobTracker中的调度器会根据心跳信息对其分配“slot”,TaskTracker获得slot之后,就开始执行相应的工作。其中 slot 有两种: MapSlot 和 TaskSlot ,分别负责执行Map任务和Task任务,二者互不影响。

3. Client

提供api供用户编程调用,将用户编写的MapReduce程序提交到JobTracker中。

4. Task

分为两种:Map Task 和 Reduce Task,分别执行Map任务和 Task 任务。MapReduce的输入数据会被切分成多个 split ,一个split会交给一个Map Task去执行。

Map Task

Map Task执行之后的结果经过 shuffle 等阶段会被切分成多个partition,一个partition 将由一个Reduce Task去执行。

这里写图片描述

MapReduce 2.x 架构(YARN 架构)

在MapReduce 1.x中,全局唯一的JobTracker存在单点故障的问题,并且JobTracker同时负责资源管理和作业调度,节点的工作压力巨大。因此在Hadoop 2.x 中,对原本MapReduce的架构进行了优化改造,使其成为在YARN上面运行的一个计算框架,因此其架构才用YARN的架构。

这里写图片描述

YARN将MapReduce 1.x 中的JobTracker拆分成了两个独立的组件:

1. ResourceManager

全局资源管理器,全局唯一。负责整个集群的资源管理和分配,主要由负责资源调度分配的调度器和负责应用程序提交协商的应用程序管理器组成。

2. ApplicationMaster

用户提交的每个应用程序 / 作业都会带有一个ApplicationMaster,负责与ResourceManager中的调度器通信获得资源,将得到的任务进行分配,监控作业的执行情况

除了将JobTracker切分成两个组件之外,YARN中还有两个重要的组件:

  • NodeManager

集群中的每个节点都运行一个NodeManag进程,NodeManager向ResourceManager汇报本节点的各种信息,并且接受来自ApplicationMaster的作业分配信息。

  • Container

与MapReduce 1.x 中的slot 类似,container是YARN中的资源抽象,对节点的资源,如cpu、内存、磁盘等进行封装。YARN为每一个任务分配一个container去进行执行。container与slot的区别在于,container是可以进行资源的动态划分的,而slot不能改变自身所包含资源的多少。

猜你喜欢

转载自blog.csdn.net/khxu666/article/details/80760359
今日推荐