hadoop2 mapreduce简介

0 mapreduce概述:

◆MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.

MapReduce合并了两种经典函数:
映射(Mapping)对集合里的每个目标应用同一个操作。即,如果你想把表单里每个单元格乘以二,那么把这个函数单独地应用在每个单元格上的操作就属于mapping。

化简(Reducing )遍历集合中的元素来返回一个综合的结果。即,输出表单里一列数字的和这个任务属于reducing。

◆MapReduce由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算,非常简单。

◆这两个函数的形参是key、value对,表示函数的输入信息。

MapReduce在多于10PB数据时趋向于变慢。

1 MapReduce原理***

map reduce跑的都是代码
代码在运行的时候在mapreduce模型中,学名叫做任务。

map任务执行的事情: 映射(Mapping)对集合里的每个目标应用同一个操作
reduce任务执行的事情: 化简(Reducing )遍历集合中的元素来返回一个综合的结果

mapreduce模型中间运行的数据单位是: 键值对
map任务(mapperTask),reduce任务(reducerTask)
执行的都是进程, 因为进程容易资源隔离   进程之间互相不影响,当一个进程死掉时,不会影响其余进程执行,具有较好的独立性。

原理图如下:

 


 
 2 MapReduce执行过程***

◆执行步骤:
 1. map任务处理
1.1 读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
1.2 写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
1.3 框架对所有输出的key、value进行分区(默认为一个区)。
1.4 对不同分区的数据,按照key(ascii)进行排序、分组。相同key的value放到一个集合中。
1.5 (可选)分组后的数据进行归约。
2.reduce任务处理
2.1 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
2.2 对多个map任务(比如多个map节点发送来)的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、values处理,转换成新的key、value输出。
2.3 把reduce的输出保存到文件(hdfs 或者其他类型文件)中。
说明:
从map传到reduce阶段的时候,键值对没有变化,只是map的键值对被分组化了,到了reduce阶段接受到的是分组化的键值对,
如果将分组拆分开,还是map阶段的键值对, 比如两人处对象后结婚变成了一组,但是这还是那两个人一样。

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2192701