0

我想听听您对 Partitioner vs MultipleOutputs 的看法。
假设我有一个包含密钥的文件

0:aaa  
1:bbb  
0:ccc  
0:ddd  
...  
1:zzz  

我想要 2 个文件:一个文件包含以开头的键0:,另一个包含以1:. 我应该使用哪种方法:
1) 使用自定义分区器,它将解析键并为 getPartition() 返回 0 或 1。
2)在reduce阶段使用MultipleOutputs.write,通过解析key并为MultipleOutputs.write的参数 提供zeroor 。onenamedOutput

哪一个更好?对我来说,1) 更好,因为减速器处理单个文件。

4

2 回答 2

0

当您说第一个选项更好时,这意味着您受 2 个值的约束。假设如果您获得其他键值,您可能需要更改分区器或配置以设置 3 个减速器,所以更好的主意是使用多个输出

于 2014-08-07T18:17:38.517 回答
0

如果您的工作只是将输入文件分成两部分,那么 MultipleOutputs 是一个更好的选择,因为您可以节省 shuffle / sort 阶段(通过运行仅映射作业)。

现在,如果您有很多输入文件并且不希望输出文件的数量是输入的 2 倍,那么使用基于分区器的方法将允许您将输入文件合并为 2 个输出(但是它们不会很好命名,MultipleOutputs 的另一个好处,但是您可以通过在 reducer 中使用 MultipleOutputs 和 LaxyOutputFormat 轻松解决此问题,以确保不会将空的 part-r 文件写入输出)。

所以回答 - 这取决于你有多少输入文件,以及你想要多少输出文件。

于 2013-12-01T21:10:06.593 回答