Hadoop MultipleOutputFormat 支持 org.apache.hadoop.mapreduce.Job

2024-01-05

我是 Hadoop 的新手! 现在我尝试将 MultipleOutputFormat 与 hadoop 2.2.0 一起使用,但似乎它们只适用于已弃用的“JobConf”,而“JobConf”又使用已弃用的 Mapper 和Reducer(org.apache.hadoop.mapred.Reducer)等。有什么想法如何使用新的“org.apache.hadoop.mapreduce.Job”实现多个输出功能吗?


正如@JudgeMental 指出的,你应该使用MultipleOutputs使用新的 API (mapreduce) 因为MultipleOutputFormat只支持旧的API(mapred). MultipleOutputs实际上为您提供的功能比MultipleOutputFormat:

  • With MultipleOutputs,每个输出可以有自己的OutputFormat,而与MultipleOutputFormat每个输出必须相同OutputFormat.
  • With MultipleOutputFormat您对命名方案和输出目录结构有更多的控制权MultipleOutputs.
  • 您可以使用MultipleOutputs in the map and reduce在同一份工作中发挥职能,这是你无法做到的MultipleOutputFormat.
  • 您可以为不同的输出设置不同的键和值类型MultipleOutputs.

所以两者并不相互排斥,即使MultipleOutputs功能较多,但命名功能不太灵活。

了解如何使用MultipleOutputs,你应该看看本文档 http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html其中包含一个完整的示例。简而言之,您将在驱动程序类中添加以下内容:

// Defines additional single text based output 'text' for the job
MultipleOutputs.addNamedOutput(job, "text", TextOutputFormat.class, LongWritable.class, Text.class);

// Defines additional sequence-file based output 'sequence' for the job
MultipleOutputs.addNamedOutput(job, "seq", SequenceFileOutputFormat.class, LongWritable.class, Text.class);

而在你的Mapper or Reducer你应该初始化你的MultipleOutputs in the setup方法与MultipleOutputs mos = new MultipleOutputs(context);然后你可以在map and reduce功能为mos.write("seq", LongWritable(1), new Text("Bye"), "seq_a")。不要忘记将其关闭cleanup方法与mos.close() !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop MultipleOutputFormat 支持 org.apache.hadoop.mapreduce.Job 的相关文章

随机推荐