【问题标题】:How to ensure that MapReduce tasks are independent of each other?如何保证 MapReduce 任务相互独立?
【发布时间】:2011-01-22 09:09:48
【问题描述】:

我很好奇,但是 MapReduce、Hadoop 等如何将一大块数据分解为独立操作的任务?我很难想象这是怎么回事,考虑到数据通常是相互关联的,任务之间的状态条件等等。

【问题讨论】:

    标签: hadoop parallel-processing mapreduce batch-processing hadoop2


    【解决方案1】:

    如果数据是相关的,那么您的工作就是确保信息得以传递。 MapReduce 分解数据并处理它,而不考虑任何(未实现的)关系:

    Map 只是从输入文件中以块的形式读取数据,然后一次将它们传递给 map 函数一个“记录”。 default-record 是一行(但可以修改)。

    您可以在 Map 中使用其来源注释数据,但您基本上可以使用 Map 做的是:对数据进行分类。您通过新键发出一个新键和新值以及 MapReduce 组。所以如果不同记录之间有关系:选择相同(或类似*1)的key来发出它们,这样它们就被组合在一起了。

    对于 Reduce,数据被分区/排序(即分组发生的地方),然后 reduce 函数从一组中接收所有数据:一个键及其所有关联值。现在您可以汇总这些值。就是这样。

    所以你有一个由 MapReduce 实现的总体分组。其他一切都是你的责任。您想要来自两个来源的交叉产品吗?例如通过引入人工密钥和多发射(片段和复制连接)来实现它。你的想象力是极限。并且:您始终可以通过另一个作业传递数据。

    *1:类似,因为你可以影响以后分组的选择。通常它是 group 是 identity-function,但你可以改变它。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多