Hadoop API:Reducer的OutputFormat

时间:2012-02-10 18:09:10

标签: hadoop mapreduce hadoop-streaming

我对hadoop API感到困惑。 (猜猜它一直在变化)

如果我没有错,JobConfdeprecated,我们应该使用JobConfiguration类代替从java运行map reduce作业。虽然最近发布的hadoop 1.0.0 JobConf似乎不再被弃用!

所以我使用Job和配置类来运行map reduce作业。现在,我需要根据作为地图输出一部分的某些值将Reducer输出文件放在文件夹结构中。我浏览了几篇文章,发现用OutputFormat类可以实现这一点,但我们在两个包中有这个类:

org.apache.hadoop.mapred and 
org.apache.hadoop.mapreduce 

在我们的job对象中,我们可以将输出格式类设置为:

job.setOutputFormatClass(SomeOutputFormat.class);

现在,如果SomeOutputFormat extendsorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat,我们会得到一个名为getRecordWriter();的方法,这无论如何都无法覆盖输出路径。

使用jobConf还有另一种方法,但在设置mappers, reducers, partitions, sorting and grouping类方面似乎无效。

有什么东西非常明显,我错过了吗?我想在一个基于值的文件夹中编写我的reduce输出文件。例如,SomeOutputPrefix/Value1/Value2/realReduceFileName

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你需要实施

  1. 您自己的输出格式类和
  2. 您自己的RecordWriter,它将不同的值写入不同的地方
  3. 因此,您的SomeOutputWriter将在其new SomeRecordWriter("SomeOutputPrefix")方法中返回getRecordWriter(),而SomeRecordWriter会将不同的值写入不同的文件夹。