如何在Hadoop中两次通过OutputFormat.RecordWriter写入(key,value)

时间:2013-01-03 17:58:40

标签: hadoop

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

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

RecordWriterType1 / 2的输入都是相同的。有没有办法做到这一点?

谢谢你, 马尔科。

1 个答案:

答案 0 :(得分:0)

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

你确实有一些选择可以解决:

  • 使用身份缩减器将已排序的数据输出到HDFS,然后使用身份验证器对数据运行两个作业 - 浪费但如果您没有那么多数据则很简单
  • 如上所述,但您可以使用仅映射作业和键比较器来模拟reducer函数,因为您知道输入已经排序(您需要确保将分割大小设置得足够大以确保所有来自第一个reducer输出文件的数据在单个映射器中处理,而不是通过2个以上的映射器实例进行拆分
  • 您可以将reducer键/值写入reducer中的本地磁盘,然后在reducer的清理方法中打开本地文件并按第二个选项中的详细说明进行处理(使用组比较器确定键)边界)。
  • 如果您仔细阅读ReduceTask的来源,您甚至可能会滥用'本地磁盘上合并的已排序段并再次运行数据,但此选项纯粹是纯粹的hackery ......