如何在Hadoop中执行OutputFormat.RecordWriter写入(键、值)两次

如何在Hadoop中执行OutputFormat.RecordWriter写入(键、值)两次,hadoop,Hadoop,我有一种情况,我需要检查OutputFormat的键/值对两次。实质上: OutputFormat.getRecordWriter() // returns RecordWriteType1 ... and when all those are complete across all machines OutputFormat.getRecordWriter() // return RecordWriterType2 两个RecordWriterType1/2的类型相同。有办法做到这一点

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

 OutputFormat.getRecordWriter() // returns RecordWriteType1
 ... and when all those are complete across all machines
 OutputFormat.getRecordWriter() // return RecordWriterType2
两个RecordWriterType1/2的类型相同。有办法做到这一点吗

谢谢,,
Marko.

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

您确实有一些可能解决的选项:

  • 使用identity reducer将排序后的数据输出到HDFS,然后使用identity mappers在数据上运行两个作业-如果没有那么多数据,这是浪费,但很简单
  • 如上所述,但是您可以使用仅映射作业和键比较器来模拟reducer函数,因为您知道输入已经排序(您需要确保分割大小设置得足够大,以确保第一个reducer输出文件中的所有数据在单个映射器中处理,而不是在2+个映射器实例上分割)
  • 您可以将reducer键/值写入reducer中的本地磁盘,然后使用reducer的清理方法,打开本地文件并按照第二个选项中的详细说明进行处理(使用组比较器确定键边界)
  • 如果您在源代码中查找ReduceTask,您甚至可以“滥用”本地磁盘上的合并排序段并再次运行数据,但此选项纯粹是纯粹的黑客行为

你的意思是再次迭代reducer键/值吗?你能再解释一下吗?是的。这正是我的意思。我希望我可以在同一个“OutputFormat运行”中遍历我的键/值两次