如何解决地图缩减架构中的顺序问题?

时间:2011-11-23 16:21:08

标签: algorithm mongodb mapreduce

对于map reduce操作中使用的任何键,带有can键的元素可以遵循一些自然顺序。

假设我们想要找到元素e0e1,以便:

  1. 每个属于同一个键,
  2. 他们遵循一些排序e0< e1
  3. 没有元素en其中e0< en< e1关于我们的订购。
  4. e0e1之间的某种关系成立。
  5. (如何)可以使用map reduce有效地完成?

    通常的数据库解决方法就是通过我们的订购来获取我们的集合上的光标。跟踪最后看到的元素,以及关系的当前元素和测试。

    地图缩小的问题是,在减少e0e1的减少调用中,没有人知道en是否存在会破坏您{{1}的假设}和e0是连续的。

    有巧妙的解决方法吗?还是mapreduce框架可以保证reduce调用中的一组元素是顺序的?可以在mongodb中完成吗?

3 个答案:

答案 0 :(得分:2)

MapReduce是并行编程的范例。 Amdahl定律限制了由于并行化到1 /(S + P / N)而实现的加速,其中S和P是代码的串行/并行部分的分数,N是处理器的数量。如果S = 1,则P = 0并且加速是1,即,使用任何数量N个处理器没有(就计算时间而言)的好处。因此,如果你有一个“顺序”(即,100%非并行,就像计算一个非关联减少操作)的工作,MapReduce永远不会有所帮助。注意:也许你的问题比你想象的更平行。

答案 1 :(得分:1)

您可以将排序选项传递给map-reduce。这应该得到你想要的: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Overview

但是,如果没有更具体的例子,很难回答你的问题。

答案 2 :(得分:0)

您的案例的实际示例是点击流分析,作为网络分析的一部分。

在那个实际例子中,我们发现我们可以通过两种方式在Hadoop中解决这个问题:

  1. 只需将缩减器中的所有事件拉入内存中,然后在内存中进行排序并完成工作。
  2. 使用名为“二级排序”的hadoop功能,让记录以您选择的排序顺序到达reducer。
  3. 虽然我的回答是基于我对hadoop的经验,但我认为这种思路可能会让你在mongodb环境中找到答案。