刚刚阅读完以下关于MapReduce的论文。一个问题-减少等待所有地图操作完成的时间,还是可以在某些结果可用后开始呢?
在MapReduce作业中,在所有Map作业完成之前,reduce不会开始执行reduce方法。精简器会在它们可用时立即开始从映射器中复制中间键值对。这就是为什么我们能够在Job-tracker中看到当某些映射仍在运行时减少显示几%的原因..
Haskell具有内置的map和reduce(称为fold),并且其执行顺序是不确定的(只要您不尝试评估整个对象,您甚至可以在无限列表上进行操作)。因此,您可以选择任何一种方式。
[如果您询问Google是如何做到的,我不确定,但是他们可能会对其进行设置,以使reduce尽可能最大地消耗他们正在映射的列表,因为那样就不会必须将已处理的值保留在内存中。