Hadoop学习笔记(一):MapReduce工作机制

来源:互联网 发布:c语言编程题库 编辑:程序博客网 时间:2024/06/07 03:49

MapReduce的运行过程如下图所示:


MapReduce的作业运行步骤如下:
1.客户端启动MapReduce程序,JobClient的runJob( )方法用于新建JobClient实例和调用submitJob( )方法

2.JobClient通过getNewJobId( )方法向JobTracker请求一个新的作业ID

在获得新的作业ID后,还进行了两个步骤(在图中未显示):
<1>检查作业的输出说明。如果没有指定输出目录或输出目录不存在,则不提交作业,把错误返回给MapReduce程序。

<2>计算作业的输入分片。如果输入分片无法计算(例如输入路径不存在),则不提交作业,把错误返回给MapReduce程序。

3.将运行作业所需要的资源(包括作业JAR文件、配置文件和计算所得的输入分片)复制到一个以作业ID命名的目录下,该目录位于JobTracker的共享文件系统中(例如:HDFS)。其中,属性mapred.submit.replication指定作业JAR文件的数量。

4.调用submitJob( )方法告知JobTracker作业准备执行

5.JobTracker接收到submitJob( )方法调用后,把此调用放入到一个内部队列中,由作业调度器进行调度,并对其进行初始化

6.为了创建任务运行列表,作业调度器从共享文件系统中获取JobClient已经计算好的输入分片信息,为每个分片创建一个map任务。其中,创建的reduce任务的数量由JobConf的mapred.reduce.task属性决定。


7. TaskTracker定期向JobTracker发送心跳,告知TaskTracker自身是否还存活。同时,心跳还充当两者的消息通道(比如:TaskTracker会指明它是否准备好运行新的任务)。

对于任务的分配有两点需要注意:
<1> JobTracker会为TaskTracker分配任务。对于map任务和reduce任务,TaskTracker会有固定数量的任务槽。一个TaskTracker可以同时运行多个map任务和多个reduce任务。另外,如果TaskTracker有空闲的map任务槽时,JobTracker会优先选择一个map任务给它。如果map槽被填满,就选择一个reduce任务。

<2> 分配map任务,JobTracker会选择距离输入分片最近的TaskTracker(网络位置最近)。距离最近的是数据本地化,即把任务分配到输入分片所在的节点上。距离次之的是机架本地化,即把任务分配到与输入分片同一机架的不同节点上。

8. 从共享文件系统把作业的JAR文件复制到TaskTracker所在的文件系统,同时TaskTracker把应用程序所需的全部文件从分布式缓存复制到本地磁盘。然后,TaskTracker为任务新建一个本地工作目录,并把JAR文件解压到该目录下。最后,Tasktracker新建一个TaskRunner

9.TaskRunner启动一个新的子JVM

10.子JVM运行map任务或reduce任务。


0 0