MapReduce模型简介

适合用MapReduce来处理的数据集需要满足一个前提条件:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。(即变量间不存在相关性)

这些小数据集可以被多个Map任务并行处理。每个Map任务输入一个小数据集,Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce任务输出最后结果,并写入分布式文件系统。

传统并行计算框架 MapReduce
集群框架/容错性 共享式(共享内存/共享存储),容错性差 非共享式,容错性好
硬件/价格/扩展性 刀片服务器、高速网、SAN,价格贵,扩展性差 普通PC机,便宜,扩展性好
编程/学习难度 what-how,难 what,简单
适用场景 实时、细粒度计算、计算密集型(航空航天,军事,国用的) 批处理、非实时、数据密集型(民用的)

“计算向数据靠拢”而不是“数据向计算靠拢”
只要有可能,MapReduce 框架就会将Map程序就近地在HDFS数据所在的节点运行,即将计算节点和存储节点放在一起运行,从而减少节点间的数据移动开销。

Map和Reduce函数

简单来说,大致的流程是:
数据块/文件块(任意格式,可以是文档,也可以是二进制文件) -> Map函数(分片键值对) -> Reduce函数(列表键值对) -> 最终结果写入分布式文件系统

计算目的

Map,自定义目标的键值对,然后进行处理,意思是要用户自己去整理数据如何转为正确的键值对关系。
Reduce,得到所需的键值对之后进行的处理,可以是合并,排序等,然后输出写入具体的文件中。输出的内容仍然是键值对的形式。

Shuffle过程详解