【问题标题】:Hadoop API: OutputFormat for ReducerHadoop API:Reducer 的 OutputFormat
【发布时间】:2012-03-03 04:59:40
【问题描述】:

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

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

所以我使用 Job 和配置类来运行 map reduce 作业。现在,我需要根据我的地图输出中的某些值将减速器输出文件放在文件夹结构中。我浏览了几篇文章,发现可以使用 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

谢谢!

【问题讨论】:

    标签: hadoop mapreduce hadoop-streaming


    【解决方案1】:

    我认为你需要实现

    1. 您自己的输出格式类和
    2. 您自己的 RecordWriter,它将向不同的地方写入不同的值

    因此,您的 SomeOutputWriter 将在其 getRecordWriter() 方法中返回 new SomeRecordWriter("SomeOutputPrefix"),而 SomeRecordWriter 会将不同的值写入不同的文件夹。

    【讨论】:

    • 感谢 DNNX。在这些线上,但想看看是否有其他更简单的方法。似乎这是这样做的方法。必须稍微调整我的分区逻辑才能与唱片作家一起正常工作。它奏效了。
    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    相关资源
    最近更新 更多