一、简介
* 大数据计算问题的提出:如何处理并行计算、如何分发数据、如何处理错误等等。这些问题合起来使得大数据处理变得复杂
* 为了解决这些问题,需要设计新的计算抽象模型:只要表述想要执行的运算,而屏蔽了并行计算、容错、数据分发、负载均衡等复杂细节,这些细节被封装在一个库里
* 抽象模型设计的灵感来自于函数式语言的Map和Reduce原语
- Map:对输入数据应用Map操作得出一个中间<key, value>对集合
- Reduce:对具有相同key的value集合上应用Reduce操作合并中间结果
* MapReduce框架模型:通过简单接口(用户只要实现Map和Reduce函数)实现大规模数据的分布式计算,实现在大量普通机器上的高性能计算
二、编程模型
1、例子
* 计算一个大文档集合中每个单词的出现次数(MapReduce编程的HelloWorld了),伪代码:
map(string key, string value)
for each word w in value
emitIntermediate(w, 1)
reduce(string key, Iterator values)
int result = 0
for each v in values
result += ParseInt(v);
Emit(AsString(result))
* map函数输出文档每个词(key),及这个词的出现次数(value,这里为1)
* reduce函数将每个词的出现次数累加起来输出
2、类型
* 在概念上,Map和Reduce函数有相关联的输入输出类型
map(k1, v1) => list(k2, v2)
reduce(k2, list(v2)) => list(v2)
3、更多的例子
* 分布式grep,分布式排序,计算URL访问频率,转置网络链接图等等
三、实现
* MapReduce模型有多种不同实现方式,取决于具体环境,如小型的共享内存机器、大型NUMA架构多处理器主机、大型网络连接集群等
1、执行概括