我遇到一种情况,需要两次检查outputformat的键/值对。本质上:
OutputFormat.getRecordWriter() // returns RecordWriteType1
... and when all those are complete across all machines
OutputFormat.getRecordWriter() // return RecordWriterType2
两个recordwritertype1/2的类型相同。有办法吗?
谢谢你,马尔科。
1条答案
按热度按时间bprjcwpo1#
不幸的是,您不能简单地在reducer数据上运行两次。
您确实有一些可能解决的选项:
使用identity reducer将排序后的数据输出到hdfs,然后使用identity mappers在数据上运行两个作业—如果没有那么多数据,这是一种浪费,但很简单
如上所述,但是您可以使用map only作业和key comparator来模拟reducer函数,因为您知道输入已经排序(您需要确保分割大小设置得足够大,以确保第一个reducer输出文件中的所有数据在单个Map器中处理,而不是在2+个Map器示例上分割)
您可以将reducer键/值写入reducer中的本地磁盘,然后使用reducer的清理方法,打开本地文件并按照第二个选项中的详细说明进行处理(使用组比较器确定键边界)。
如果你挖掘reducetask的源代码,你甚至可以在本地磁盘上“滥用”合并的排序段并再次运行数据,但是这个选项是纯粹的黑客行为。。。