您的位置:首页 > 运维架构

hadoop学习笔记--7.MapReduce的工作机制

2017-05-30 10:20 288 查看
一、hadoop MapReduce架构


MapReduce的整个架构如上图所示,同HDFS一样,Hadoop MapReduce也采用了Master/Slave架构,其主要由以下4大组件构成。

(1):Client

client节点上运行MapReduce程序和JobClient,负责提交MapReduce作业和用户显示处理结果。

(2):JobTracker

JobTracker主要负责资源监控和作业调度。JobTracker监控所有TaskTrack与作业的健康状态,一旦某个节点作业失败,就会将相应的任务转移到其他的节点上。JobTracker的功能包括制订MapReduce作业的执行计划,分配任务的Map和Reduce的执行节点,监控任务的执行,重新分配失败的任务。每个Hadoop集群中仅有一个JobTracker。

(3):TaskTracker

TaskTracker会周期性的通过Heartbeat将本节点资源的使用情况和任务运行的进度汇报给JobTracker,同时接收来自JobTracker的命令并执行相应的操作。TaskTracker 分为MapTracker和ReduceTracker。

(4):Task

Task分为Map Task 和Reduce Task两种,均由TaskTracker启动。

Map Task执行过程如下图所示:



Map Task首先从HDFS中读取输入的数据,并解析成一个个Key/value对,依次调用用户自定义的map()函数,最终将Map的结果存在至本地的磁盘上。其中,Partition()会对Map产生的结果进行分片,以便将同一组的数据交个同一个Reduce处理,一般会根据哈希函数进行数据的均匀分布。

Reduce Task执行过程如下图所示:



Reduce Task处理过程主要分为3个部分,1:从远程节点上读取Map Task的中间结果(shuffle阶段)。2:按照Key/Value对数据进行排序(sort阶段) 3:依次读取排序后的key/values结果集,调用用户自定义的Reduce()函数处理,并将最终结果存在HDFS上。

二、hadoop MapReduce作业运行流程


1、作业提交

(1)、在客户端启动一个作业(步骤1).

(2)、向JobTracker请求一个Job ID。(步骤2).

(3)、检查作业的输出目录,如果目录已存在,则会返回错误信息给MapReduce程序。

(4)、计算作业的输入分片,如果分片无法计算,即输入路径不存在,则作业不提交,返回错误。

(5)、将运行作业所需要的资源,如JAR包,作业的配置文件,计算的输入分片等复制到一个以作用ID命名的目录下JobTracker的目录中。(步骤3).

(6)、完成以上工作后,Jobclient会向JobTracker发出作业提交请求(步骤4).

2、作业初始化

(1)、当JobTracker收到任务提交请求后,会把此任务放在内部队列中,交给作业调度器进行调度,并对其初始化。(步骤5).

(2)、作业调度器从共享文件系统中获取JobClient已计算好的输入分片信息,为每一个分片创建一个Map任务,创建的Reduce任务由mapred.reduce.Task属性决定。(步骤6).

3、任务分配

TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行,同时心跳中还携带着很多的信息,比如当前map任务完成的进度等信息。当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消息给用户。JobTracker会优先填满Map任务槽,只要有空闲的Map任务槽,就会分配一个map任务,map任务槽满了才分配Reduce任务。

4、Map任务执行

在Map TaskTracker收到JobTracker分配的map任务后,将执行一系列的操作执行此任务。首先,会创建一个TaskInProgress对象实例以调度和监控任务。然后将作业的Jap文件和作业的配置文件从文件系统中取出,并复制到本地工作目录下。再次,TaskTracker会新建一个TaskRunner实例来运行此Map任务。Taskrunner将会启动一个单独的JVM,并在其中运行map函数。MapTask计算获得的数据,定期存入缓存中,并在缓存满的情况下存入本地磁盘中。任务执行过程中,定期与TaskTracker通信汇报任务进度,直到任务完成,将所有的计算结果存入到本地磁盘中。

5、Reduce任务执行

在部分Map任务执行结束后,JobTracker会以相同的机制给Reduce TaskTracker分配Reduce任务。Reduce TaskTracker也会在单独JVM中的Reduce Task执行Reduce函数。同时,ReduceTask会从远程节点下载map产生的中间结果。当所有的Map任务执行完成后,JobTracker会通知所有的Reduce TaskTracker节点开始Reduce任务的执行。同样,任务执行过程中,定期与TaskTracker通信汇报任务进度,直到任务完成。

6:任务完成

当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消息给用户。

参考资料
Hadoop深入学习:Map Task和Reduce Task的执行流程

http://flyingdutchman.iteye.com/blog/1876189

MapReduce工作原理图文

http://blog.csdn.net/paul_wei2008/article/details/19348233

刘军,Hadoop大数据处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop mapreduce