【问题标题】:How can one solve sequential problems in a map reduce architecture?如何解决 map reduce 架构中的顺序问题?
【发布时间】:2011-11-23 16:21:07
【问题描述】:

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

假设我们要查找元素e0e1,这样:

  1. 每个都属于同一个键,
  2. 他们遵循一些命令e0 e1
  3. 没有元素 en where e0 en e1 关于我们的订购。
  4. e0e1 之间存在某种关系。

(如何)使用 map reduce 可以有效地做到这一点?

解决这个问题的常用数据库方法是让光标悬停在按我们的排序排序的集合上。跟踪最后看到的元素和当前元素并测试关系。

map reduce 的问题在于,在减少 e0e1 的 reduce 调用中,不知道是否存在 en 会破坏您的假设,即 e0e1 是连续的.

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

【问题讨论】:

  • 我不确定我是否在关注,您是否有兴趣在 map/reduce 步骤中找到此类元素?还是在减少步骤中? if first: map/reduce 可以用来排序,那么它当然可以找到这样的一对。
  • 似乎要做到这一点,您需要与数据一样多的内存或辅助存储。而游标/迭代器方法不需要额外的内存。你能提供算法实现的链接吗?我似乎找不到什么好东西。
  • 问题:“如何解决 map reduce 架构中的顺序问题?”答:效率低下。
  • @Patrick87,我很怀疑(因此提出了问题)。只是希望有一些更实质性的 cmets/references/ideas。
  • @z5h:MapReduce 是并行编程的范例。 Amdahl 定律将由于并行化实现的加速限制为 1/(S+P/N),其中 S 和 P 是代码的串行/并行部分的分数,N 是处理器的数量。如果 S=1,则 P=0 并且加速比为 1,即,使用任意数量的 N 个处理器没有任何好处(在计算时间方面)。因此,如果您有一个“顺序”(即 100% 非并行,例如计算非关联归约操作)作业,MapReduce 永远不会有帮助。注意:也许你的问题比你想象的更相似。

标签: algorithm mongodb mapreduce


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    不过,如果没有更具体的例子,很难回答您的问题。

    【讨论】:

    • 对。这意味着我的 reduce 输入将被订购,但这并不意味着我不会在任何特定的 reduce 调用中丢失我的“en”。
    【解决方案3】:

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

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

    1. 只需在 reducer 中拉取内存中的所有事件,在内存中对它们进行排序并完成工作。
    2. 使用称为“二级排序”的 hadoop 功能,让记录按照您选择的排序顺序到达 reducer。

    虽然我的回答是基于我使用 hadoop 的经验,但我认为这种思路可能会在 mongodb 上下文中帮助您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2019-02-11
      相关资源
      最近更新 更多