mapreduce-osdi04.pdf

起源

几位作者在工作中针对巨量的数据,写了上百种数据处理程序,他们有一些特征:

  1. 业务逻辑简单
  2. 数据量巨大,因此需要在上百台计算机上进行分布式计算

这就提出了几项挑战

  1. 如何并行计算
  2. 如何分发数据
  3. 如何进行容错

数据处理程序有大量的code都是在处理类似的问题而不是在写业务。

因此,提出了一种新的抽象方式,从lisp和其他的一些funcitonal language中借用了两个概念使得工程师可以专注于业务逻辑,而隐藏上述的非功能性需求,这就是Map-Reduce。

实现

执行逻辑

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