【发布时间】:2011-07-27 02:38:45
【问题描述】:
我正在使用 Hadoop 的 MapReduce。我有一个文件作为地图函数的输入,地图函数做了一些事情(与问题无关)。我希望我的减速器获取地图的输出并写入两个不同的文件。 我的看法(我想要一个有效的解决方案),我的想法有两种方式:
- 1 个 reducer,它知道识别不同的情况并写入 2 个不同的上下文。
- 2 个并行化简器,每个都知道以识别他的相关输入,忽略其他的,这样每个都将写入文件(每个减速器将写入不同的文件)。
我更喜欢第一个解决方案,因为这意味着我将只检查一次地图的输出,而不是并行两次 - 但如果第一个在某种程度上不受支持 - 我会很高兴听到第二个建议的解决方案。
*注意:这两个最终文件应该是分开的,此时不需要加入它们。
【问题讨论】:
-
您是否考虑过从映射器发出两个单独的键,一个用于每种映射器输出的选项?
-
如果没有标准来选择两个文件中的每个文件,您可以简单地拥有两个 reducer 并发出键/值对。来自一个 reducer 的所有键/值将进入一个文件,其余的将进入另一个文件。
-
我们需要更多关于如何识别每种记录类型的信息(正如@David 所说 - 如果您可以在映射器中为每种类型的记录创建不同的键,那么您可以在该键上创建 hadoop 分区并将每条记录发送到其特定的减速器)。
-
@Matt:我确实有一个标准,它是在地图阶段设置的