我对 hadoop API 完全困惑。 (猜猜它一直在变化)
如果我没记错的话,JobConf
已被弃用
,我们应该使用Job
和Configuration
类而不是从 java 运行 map reduce 作业。似乎最近发布的 hadoop 1.0.0
JobConf
不再被弃用!
所以我正在使用 Job 和配置类来运行 map reduce 作业。现在,我需要根据 map 输出中的某些值将 reducer 输出文件放在文件夹结构中。我浏览了几篇文章,发现可以使用 OutputFormat
类来实现这一点,但我们在两个包中都有这个类:
org.apache.hadoop.mapred and
org.apache.hadoop.mapreduce
在我们的 job
对象中,我们可以将输出格式类设置为:
job.setOutputFormatClass(SomeOutputFormat.class);
现在如果 SomeOutputFormat
extends
说 org.apache.hadoop.mapreduce.lib.output.FileOutputFormat
,我们得到一个名为 getRecordWriter();
这对覆盖输出路径没有任何帮助。
还有另一种使用jobConf
的方法,但在设置映射器、缩减器、分区、排序和分组
类方面似乎也不起作用。
有什么非常明显的东西是我遗漏的吗?我想将我的 reduce 输出文件写在一个基于值的文件夹中。例如,SomeOutputPrefix/Value1/Value2/realReduceFileName
谢谢!
最佳答案
我认为你需要实现
- 你自己的输出格式类和
- 你自己的 RecordWriter,它将把不同的值写入不同的地方
因此,您的 SomeOutputWriter 将在其 getRecordWriter()
方法中返回 new SomeRecordWriter("SomeOutputPrefix")
,并且 SomeRecordWriter
将写入不同的值不同的文件夹。
关于Hadoop API : OutputFormat for Reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232622/