Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop API:Reducer的OutputFormat_Hadoop_Mapreduce_Hadoop Streaming - Fatal编程技术网

Hadoop API:Reducer的OutputFormat

Hadoop API:Reducer的OutputFormat,hadoop,mapreduce,hadoop-streaming,Hadoop,Mapreduce,Hadoop Streaming,我完全被hadoop API搞糊涂了。(猜它一直在变) 如果我没有记错的话,JobConf被弃用了,我们应该使用Job和Configuration类来从java运行map reduce作业。在最近发布的hadoop1.0.0中,似乎不再有人反对JobConf了 因此,我使用Job和configuration类来运行map reduce作业。现在,我需要将reducers输出文件放在一个文件夹结构中,该文件夹结构基于映射输出的某些值。我浏览了几篇文章,发现使用OutputFormat类可以实现这一

我完全被hadoop API搞糊涂了。(猜它一直在变)

如果我没有记错的话,
JobConf
弃用了
,我们应该使用
Job
Configuration
类来从java运行map reduce作业。在最近发布的hadoop1.0.0中,似乎不再有人反对JobConf了

因此,我使用Job和configuration类来运行map reduce作业。现在,我需要将reducers输出文件放在一个文件夹结构中,该文件夹结构基于映射输出的某些值。我浏览了几篇文章,发现使用
OutputFormat
类可以实现这一点,但我们将这个类分为两个包:

org.apache.hadoop.mapred and 
org.apache.hadoop.mapreduce 
在我们的
作业
对象中,我们可以将输出格式类设置为:

job.setOutputFormatClass(SomeOutputFormat.class);
现在,如果
SomeOutputFormat
扩展了
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat
,我们将得到一个名为
getRecordWriter()的方法这对覆盖输出路径没有任何帮助

还有另一种方法是使用
jobConf
,但在设置
mapper、reducer、partitions、排序和分组
类方面似乎同样不起作用

有没有什么很明显的东西我遗漏了?我想将reduce输出文件写入基于值的文件夹中。对于exmaple,
SomeOutputPrefix/Value1/Value2/realReduceFileName


谢谢

我认为您需要实施

  • 您自己的输出格式类和
  • 您自己的RecordWriter将在不同的位置写入不同的值

  • 因此,您的SomeOutputWriter将在其
    getRecordWriter()
    方法中返回
    new SomeRecordWriter(“SomeOutputPrefix”)
    ,并且
    SomeRecordWriter
    将向不同的文件夹写入不同的值。

    谢谢DNNX。在这些线路上,但想看看是否有其他更简单的方法。看来这就是方法。必须稍微调整我的分区逻辑才能与record writer正常工作。它成功了。