一.什么是MapReduce
MapReduce是一个编程模型,也是一个处理和生成超大数据集的算法模型的相关实现。
所谓MapReduce,我的理解是类似于算法课上讲的分治法,先将一个超大数据集分为若干个key/value对,再对这若干个key/value对在集群的不同主机上分别进行处理生成中间key/value对,这是MapReduce中的Map部分,也可以说是分治法中“分”的阶段。
所有相同key值的中间key/value对由MapReduce库合并后交给Reduce函数,Reduce函数合并这些 value值,形成一个较小的value值的集合。一般的,每次Reduce函数调用只产生0或1个输出value值。 通常我们通过一个迭代器把中间value值提供给Reduce函数,这样我们就可以处理无法全部放入内存中的 大量的value值的集合。 这是MapReduce中的Reduce部分,分治法中的“治”的阶段。下面是一个例子:
计算一个大的文档集合中每个单词出现的次数,下面是伪代码段:
map(String key, String value):
// key: 可以是文档名,也可以是行偏移量,用户自己定义
// value: 相应key对应的文档内容。
for each word w in value:
EmitIntermediate(w, “1″);
//对value中的每个词生成一个中间key/value对<某个词,1>
reduce(String key, Iterator values):
// 上一步会产生很多key相同的key/value对,将这些key/value对的key提取出来,作为该函数的key,将这些value值合并成一个列表,作为该函数的value
int resu