hadoop的Mapreduce运行机制(一)

上文对MapReduce并行计算做了一个简单的介绍,我们知道MapReduce的核心思想就是“分而治之”。那么本文继续讲解Hadoop中Mapreduce是如何运行的。但是在介绍运行机制之前先给大家介绍一下Mapreduce计算过程中需要涉及的一些对象的定义,如下:

1、client客户端:编写并提交MapReduce程序。

2、JobTracker:初始化作业,作业任务的分配,与TaskTracker进行通信,并管理整个MapReduce任务的运行。

3、TaskTracker:从JobTracker接收相关指令,运行、杀死等相关本地节点任务TASK。汇报节点相关情况给JobTracker。

4、HDFS文件系统:报存作业(job)的结果数据以及相关配置信息。

这里的JobTracker与TaskTracker的角色相当于HDFS文件系统当中的NameNode(主节点)与DataNode(数据节点)一样。


MapReduce1.0任务运行过程

下面通过图解一步一步介绍hadoop1.0中MapReduce任务的运行过程:

hadoop的Mapreduce运行机制


1、作业(job)提交

客户端(client)编写好MapReduce程序后并运行(如图步骤1),接下来就是要把程序(即任务)提交到JobTracker上。首先

1.1、如图步骤2向Jobtracker node提交申请,获取一个作业ID(get new job id).

1.2、计算作业的输入分片大小,将运行作业的相关代码、配置文件、输入分片的计算资源以作业id命名复制到hdfs文件系统上。如步骤3。

1.3、通过jobtracker提交作业(submit job)如步骤4。


2、作业初始化

提交完作业后,JobTracker就会对作业进行初始化,如步骤5,初始化的作用是将要执行的job放到队列当中,让作业调度器能够调度的到这个作业,以便JobTracker能够跟踪job的状态和进程。


3、作业任务分配

初始化完毕后,作业调度器会根据程序从HDFS中获取输入分片信息(input split),如步骤6。接着为每个分片创建一个map任务,这个任务运行在tasktracker node节点上。Tasktracker会定期发送心跳给jobtracker(如步骤7),心跳间隔是5秒(这个时间可以参数设定),通过心跳,jobtracker可以监控tasktracker是否存活,也可以获取tasktracker处理的状态和问题,同时tasktracker相关的指令也可以通过心跳传递。


4、作业任务的执行

任务分配好后就是执行任务了(如步骤9、10)。在任务执行时候jobtracker可以通过心跳机制监控tasktracker的状态和进度,同时也能计算出整个job的状态和进度,而tasktracker也可以本地监控自己的状态和进度。


5、作业任务完成

当jobtracker获得了最后一个完成指定任务的tasktracker操作成功的通知时候,jobtracker会把整个job状态置为成功,然后当客户端查询job运行状态时候(注意:这个是异步操作),客户端会查到job完成的通知的(如步骤8)。

上面关于mapreduce的运行机制是基于hadoop1.0的运行机制,这个是早期hadoop版本的运行方式,hadoop2.0会引入yarn,并对hadoop 的mapreduce框架进行调整。