使用Hadoop稳定版本为作业提供多个输出的最佳方法是什么?

时间:2012-03-04 16:09:48

标签: hadoop mapreduce

我有一个mapreduce作业,其作用是根据给定的标准将输入文件拆分为两个文件。 我目前正在使用Hadoop r0.20.203,因为它是目前的稳定版本 此版本提供两个API:

您可以想象,我正在使用新API ,我的问题是Hadoop r0.20.203在新API中不提供任何MultipleOutput格式。
Hadoop 0.20.203剧照在旧API 中提供MultipleTextOutputFormatMultipleTextOutputs(这些都适合我的情况)。此外,较新的Hadoop 0.22 在新API中提供MultipleOutputs

我看到了解决问题的四种方法:

  • 切换到Hadoop 0.22。此解决方案的问题在于,由于其处于测试状态,该版本可能未部署在我正在使用的集群上。
  • 将旧API用于此特定作业,将新API用于其他作业。我已经看到旧的API在Hadoop 1.0.0中已经不推荐了,所以它仍然可以使用吗?如果我以后需要切换到更新的Hadoop版本,我只能重写这个工作。
  • 将旧API用于我的所有作业,以避免兼容性/一致性问题。你认为它会损害我的程序的演变吗?特别是如果我稍后需要切换到更新的Hadoop版本。
  • 忘记多个输出并找到另一个解决方案。

如果你是我,你会怎么做?

2 个答案:

答案 0 :(得分:1)

因为很多代码依赖于它,并且因为新API(如您所发现的)从未完全实现,所以它们可能在未来的Hadoop版本中弃用旧API。我会使用旧的API而不用担心它。

请参阅http://www.cloudera.com/blog/2010/08/what%E2%80%99s-new-in-apache-hadoop-0-21/

答案 1 :(得分:0)

为什么不将源代码放在项目中并使用它?

http://grepcode.com/file_/repository.cloudera.com/content/repositories/releases/com.cloudera.hadoop/hadoop-core/0.20.2-737/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.java/?v=source

它应该与r0.20.203兼容,实际上我没有看到旧版本中不应该提供的类。

并没有什么神奇之处,它只是为每个配置的输出(类型和东西)设置了几个记录编写器。我打赌你可以在制定问题的时候自己编写