MapReduce架构及原理

Hadoop中MapReduce的架构以及原理。

MapReduce介绍

  • MapReduce 编程模型
    • Google提出的框架 主要用于搜索领域
    • 一种分布式计算模型框架解决海量数据的计算问题
    • MapReduce将整个并行计算过程抽象到两个函数
      • map(映射):对一些独立元素组成的列表的每一个元素进行指定的操作,可以高度并行
      • Reduce(化简):队一个列表的元素进行合并
    • 一个简单的MapReduce程序只需要指定map()、reduce()、input和output,剩下的事由框架来执行。

MapReduce特点

- 高容错
- 高扩展
- 编程简单
- 适合大数据离线批量处理

Map任务处理

* 读取输入文件内容,解析成key,value对。对输入文件的没一行,解析成key,value对。每一个键值对调用一次map函数
* 写自己的逻辑,处理输入的key,value,转换成新的key,value输出
* 对输出的key、value进行分区
* 对不同分区的数据,按照key进行排序】分组。相同的key的value放到一个集合中。

reduce 任务处理

* 对多个map任务的输出,按照不用的分区,通过网络copy到不同的reduce节点
* 对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对哦输入的key、value处理,转换成新的key、value输出。
* 把reduce的输出保存到文件中

MapReduce键值对格式:
键值对格式
因为会有不同的结果,所以Reduce的 v2 会是数组的形式存储多个值。

MR过程中各个角色的作用:

* jobClient:提交作业
* jobTracker:初始化作业,分配作业,TaskTracker与其进行通信,协调监控整个作业
* TaskTracker:定期与JobTracker通信,执行Map任务和Reduce任务
* HDFS:保存作业的数据、配置、jar包、结果等。

作业提交流程

* 提交作业准备
    * 编写自己的MR程序
    * 配置作业,保罗输入输出路径等等
* 提交作业
    *配置完成后,通过JobClient提交作业
* 具体功能
    * 与JobTracker通信得到一个jar的存储路径和JobId
    * 输入输出路径检查、讲job jar拷贝到的HDFS
    * 写job.xml、真正提交作业。

作业初始化

* 客户端提交作业后,jobTracker会讲作业加入到队列,然后进行调度,默认的是FIFO方式
* 具体功能
    * 作业初始化主要是指 JobInProgress中完成的
    * 读取分片信息
    * 创建task包括Map和Reduce创建task包括Map和Reduce任务

## 任务分配

* TaskTracker 与JobTracker之间的通信和任务分配是通过心跳机制实现的
* TaskTracker会主动定期向JobTracker发送报告 询问是否有任务要做, 如果有,就会申请到任务

任务执行

* 如果TaskTracker拿到任务,会将所有信息拷贝到本地,包括代码、配置、分片信息等
* TarkTacker中的localizeJob()方法会被调用进行本地化,拷贝job.jar,jobconf.job.xml到本地
* TaskTracker调用launchTaskForJob()方法加载启动任务