0

我有一种情况,我需要两次检查我的 OutputFormat 的键/值对。在本质上:

 OutputFormat.getRecordWriter() // returns RecordWriteType1
 ... and when all those are complete across all machines
 OutputFormat.getRecordWriter() // return RecordWriterType2

RecordWriterType1/2 的类型相同。有没有办法做到这一点?

谢谢你,马尔科。

4

1 回答 1

0

不幸的是,您不能简单地运行 reducer 数据两次。

您确实有一些可能的解决方法:

  • 使用身份归约器将排序后的数据输出到 HDFS,然后使用身份映射器在数据上运行两个作业 - 如果您没有那么多数据,这很浪费但很简单
  • 如上所述,但是您可以使用仅映射作业和键比较器来模拟减速器功能,因为您知道输入已经排序(您需要确保拆分大小设置得足够大以确保来自第一个减速器的所有数据输出文件在单个映射器中处理,而不是拆分超过 2 个映射器实例
  • 您可以将减速器键/值写入减速器中的本地磁盘,然后在减速器的清理方法中,打开本地文件并按照第二个选项中的详细说明进行处理(使用组比较器来确定键边界)。
  • 如果你挖掘 ReduceTask 的源代码,你甚至可以“滥用”本地磁盘上合并的排序段并再次运行数据,但这个选项是纯粹的黑客行为......
于 2013-01-04T03:11:51.633 回答