分布式计算框架MapReduce架构

Hadoop核心由HDFS和MapReduce组成,HDFS负责分布式存储,MapReduce负责分布式计算。

MapReduce最早是由Google研究提出的一种面向大规模数据处理的并行计算模型和方法,其初衷主要是为了解决搜索引擎中大规模网页数据的并行化处理。由于MapReduce可以普遍应用于很多大规模数据的计算问题,Google进一步将其广泛应用于很多大规模数据处理问题。到目前为止,Google有上万个各种不同的算法问题和程序都使用MapReduce进行处理。在Google的论文中最初的关于MR的描述和编程模型如图所示。
分布式计算框架MapReduce架构_第1张图片
分布式计算框架MapReduce架构_第2张图片
在Hadoop生态中,MapReduce是构建在分布式文件系统之上,对存储在分布式文件系统中的数据进行分布式计算。正如其名称一样,MR的计算过程分为Map阶段和Reduce阶段,在中文中经常将其翻译为映射和规约。MR的架构在V1.x和V2.x差别较大,但基本都有Client、JobTracker、TaskTracker等主要组件,典型架构如图所示。
分布式计算框架MapReduce架构_第3张图片
(1)Client
用户编写的MapReduce程序通过Client提交到JobTracker端;同时,用户可通过Client提供的一些接口查看作业运行状态。在Hadoop内部用“作业”(Job)表示MapReduce程序。一个MapReduce程序可对应若干个作业,而每个作业会被分解成若干个Map/Reduce任务(Task)。

(2)JobTracker
JobTracker主要负责资源监控和作业调度。JobTracker监控所有TaskTracker与作业的健康状况,一旦发现失败情况后,其会将相应的任务转移到其他节点;同时JobTracker会跟踪任务的执行进度、资源使用量等,并将这些信息告诉给任务调度器(Task Scheduler),而T调度器会在资源出现空闲时,选择合适的任务使用这些资源。在Hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的Scheduler。

(3)TaskTracker
TaskTracker会周期性地通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应操作(如启动新任务、杀手任务等)。TaskTracker使用“slot”等量划分本节点上的资源量。“slot”代表计算资源(CPU、内存等)。一个Task获取到一个slot后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot分为Map slot和Reduce slot两种,分别供Map Task和Reduce Task使用。TaskTracker通过slot数目(可配置参数)限定Task的并发度。

(4)Task
Task分为Map Task和Reduce Task两种,均由TaskTracker启动。我们知道,HDFS以固定大小的block为基本单位存储数据,而对于MapReduce而言,其处理单位是split。split是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。但需要注意的是,split的多少决定Map Task的数目,因为每个split会交由一个Map Task处理。

MapReduce计算任务执行的主要流程如图所示,Map过程将输入的键值对根据业务需求转换成新形式的键值对输出,Reduce过程对Map阶段输出的键值对列表进行规约整理,得到最终的输出结果。

分布式计算框架MapReduce架构_第4张图片

你可能感兴趣的:(MapReduce,Hadoop,MapReduce系列文章)