【问题标题】:Parallel reducing with Hadoop mapreduce使用 Hadoop mapreduce 进行并行归约
【发布时间】:2011-07-27 02:38:45
【问题描述】:

我正在使用 Hadoop 的 MapReduce。我有一个文件作为地图函数的输入,地图函数做了一些事情(与问题无关)。我希望我的减速器获取地图的输出并写入两个不同的文件。 我的看法(我想要一个有效的解决方案),我的想法有两种方式:

  1. 1 个 reducer,它知道识别不同的情况并写入 2 个不同的上下文。
  2. 2 个并行化简器,每个都知道以识别他的相关输入,忽略其他的,这样每个都将写入文件(每个减速器将写入不同的文件)。

我更喜欢第一个解决方案,因为这意味着我将只检查一次地图的输出,而不是并行两次 - 但如果第一个在某种程度上不受支持 - 我会很高兴听到第二个建议的解决方案。

*注意:这两个最终文件应该是分开的,此时不需要加入它们。

【问题讨论】:

  • 您是否考虑过从映射器发出两个单独的键,一个用于每种映射器输出的选项?
  • 如果没有标准来选择两个文件中的每个文件,您可以简单地拥有两个 reducer 并发出键/值对。来自一个 reducer 的所有键/值将进入一个文件,其余的将进入另一个文件。
  • 我们需要更多关于如何识别每种记录类型的信息(正如@David 所说 - 如果您可以在映射器中为每种类型的记录创建不同的键,那么您可以在该键上创建 hadoop 分区并将每条记录发送到其特定的减速器)。
  • @Matt:我确实有一个标准,它是在地图阶段设置的

标签: hadoop mapreduce


【解决方案1】:

Hadoop API 具有用于创建多个输出的功能,称为 MultipleOutputs,这使您的首选解决方案成为可能。

【讨论】:

    【解决方案2】:

    如果您在映射阶段知道记录必须转到哪个文件,您可以使用特殊键标记您的映射输出,指定它应该转到哪个文件。例如,如果记录 R1 必须转到文件 1,您将输出 ..(1 是键.. 文件 1 的符号表示,R1 是值)如果记录 R2 必须转到文件 2 ,您的地图输出将是 .

    那么如果你配置map reduce作业只使用2个reducer..它将保证所有标记为的记录都将被发送到1个reducer,而将被发送到另一个。

    这会比您首选的解决方案更好,因为您仍然只通过一次地图输出......同时,它会是并行的。

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多