MapReduce介绍

什么是MapReduce?

MapReduce是一个将分布式计算抽象为Map和Reduce两个阶段的编程模型。

一个完整的MapReduce必须要有Mapper,但是可以没有reduce。

MapReduce主要的四个部分

1、客户端Client

作用:

(1)用户编写的应用程序要通过客户端Client来提交给作业跟踪器JobTracker。

(2)用户可以通过客户端Client提供的接口查看所提交作业的运行状况。

2、作业跟踪器JobTracker

作用:

(1)负责资源监控和作业调度

(2)监控底层任务跟踪器TaskTracker和当前运行Job的健康状况。

(3)在节点失效时,转移Job到其他以节点继续运行。

(4)跟踪任务执行进度和资源使用量,并把信息发送给任务调度器TaskScheduler。

3、任务调度器TaskScheduler

作用:

(1)根据作业跟踪器JobTracker发送的任务进度和资源使用信息,决定把哪个任务分发给哪个节点的任务跟踪器TaskTracker执行。

任务调度器TaskScheduler是一个可插拔模块,即允许用户自己编写任务调度策略。

4、任务跟踪器TaskScheduler

作用:

(1)分布在各个机器(节点)上,接收作业跟踪器JobTracker发来的命令,具体都执行各种任务。

(2)把资源使用情况和任务运行进度以heartbeat的方式发送给作业跟踪器JobTraker以供其监控。

作业跟踪器:

分为Map Task和Reduce Task。一台机器可以同时运行Map Task和Reduce Task。

槽Slot:

每个TaskTracker都会把计算资源(CPU、内存等)打包,然后等分成很多份,以Slot作为当量。

Slot分为Map类型和Reduce类型两种,分别执行Map Task和Reduce Task。只有空闲的Slot才会被TaskScheduler分配新的任务。

MapReduce执行流程

详:

1.RPC请求

2.获取新的jobID

3.复制job资源

4.提交任务

5.初始化job

6.获取job资源并分配任务

7.heartbeat(返回任务状态)

8.获取job资源

9.启动任务

10.计算结果写入HDFS

细:

1.JobClient通过RPC协议向JobTracker请求一个新应用的ID,用于MapReduce作业的ID

2.JobTracker检查作业的输出说明。例如,如果没有指定输出目录或目录已存在,作业就不提交,错误抛回给JobClient,否则,返回新的作业ID给JobClient

3.JobClient将作业所需的资源(包括作业JAR文件、配置文件和计算所得得输入分片)复制到以作业ID命名的HDFS文件夹中

4.JobClient通过submitApplication()提交作业

5.JobTracker收到调用它的submitApplication()消息后,进行任务初始化

6.JobTracker读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个TaskTracker

7.TaskTracker通过心跳机制领取任务(任务的描述信息)

8.TaskTracker读取HDFS上的作业资源(JAR包、配置文件等)

9.TaskTracker启动一个java child子进程,用来执行具体的任务(MapperTask或ReducerTask)

10.TaskTracker将Reduce结果写入到HDFS当中


版权声明:本文为weixin_55076626原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。