如何在hadoop中遍历outputformat.recordwriter写入(键、值)两次

rryofs0p  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(303)

我遇到一种情况,需要两次检查outputformat的键/值对。本质上:

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

两个recordwritertype1/2的类型相同。有办法吗?
谢谢你,马尔科。

bprjcwpo

bprjcwpo1#

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

相关问题