mapreduce-osdi04.pdf
起源
几位作者在工作中针对巨量的数据,写了上百种数据处理程序,他们有一些特征:
- 业务逻辑简单
- 数据量巨大,因此需要在上百台计算机上进行分布式计算
这就提出了几项挑战
- 如何并行计算
- 如何分发数据
- 如何进行容错
数据处理程序有大量的code都是在处理类似的问题而不是在写业务。
因此,提出了一种新的抽象方式,从lisp和其他的一些funcitonal language中借用了两个概念使得工程师可以专注于业务逻辑,而隐藏上述的非功能性需求,这就是Map-Reduce。
实现
执行逻辑

- 输入数据分片成M份分给M个Map worker
- Master作为数据管道做scheduling
- Map任务调用用户Map方法做完存储在本地内存中
- 周期性dump to disk再分成R份准备分给R个Reduce worker
- Reduce worker在Master给分配任务后通过RPC读数据,读完disk sort
- Reduce worker在sorted数据上调用用户Reduce方法进行iterate,做增量式计算