使用mapred或mapreduce包创建Hadoop作业更好吗?

使用mapred或mapreduce包创建Hadoop作业更好吗?,hadoop,mapreduce,Hadoop,Mapreduce,要创建MapReduce作业,您可以使用旧的org.apache.hadoop.mapred包,也可以使用新的org.apache.hadoop.MapReduce包来创建映射器和还原器、作业。。。第一个被标记为已弃用,但同时它被恢复。现在我想知道使用旧的mapred包还是新的mapreduce包来创建作业更好,为什么。或者这仅仅取决于您是否需要仅在旧的mapred软件包中可用的MultipleTextOutputFormat之类的东西?功能方面,旧的(o.a.h.mapred)和新的(o.a.

要创建MapReduce作业,您可以使用旧的
org.apache.hadoop.mapred
包,也可以使用新的
org.apache.hadoop.MapReduce
包来创建映射器和还原器、作业。。。第一个被标记为已弃用,但同时它被恢复。现在我想知道使用旧的mapred包还是新的mapreduce包来创建作业更好,为什么。或者这仅仅取决于您是否需要仅在旧的mapred软件包中可用的MultipleTextOutputFormat之类的东西?

功能方面,旧的(
o.a.h.mapred
)和新的(
o.a.h.mapreduce
)API之间没有太大的区别。唯一显著的区别是,在旧API中,记录被推送到映射器/还原器。而新的API同时支持拉/推机制。您可以获得有关拉动机制的更多信息

此外,旧的API从0.21开始使用。您可以找到有关新API的更多信息


正如您所提到的,一些类(如MultipleTextOutputFormat)尚未迁移到新的API,由于这一点和上述原因,最好还是坚持使用旧的API(尽管转换通常非常简单)。

新旧API都很好。不过新的API更干净。尽可能使用新API,并在需要新API中不存在的特定类时使用旧API(如
MultipleTextOutputFormat

但请注意不要在同一Mapreduce作业中混合使用新旧API。这会导致奇怪的问题。

旧API(mapred)

  • 存在于包org.apache.hadoop.mapred中

  • 提供映射/减少作业配置

  • 根据迭代器减少给定键的值
  • 包装
  • 新API(mapreduce)

  • 存在于包org.apache.hadoop.mapreduce中

  • 作业配置由单独的类完成,称为JobConf,它是配置的扩展
    阶级

  • 根据Iterable减少给定键的值


  • 但是它同时被还原了
    你确定吗?例如,r0.21.0中包org.apache.hadoop.mapred.lib中的接口映射器没有标记为不推荐,而在r0.20.2中标记为不推荐。有什么原因javadocs没有提到这些吗?在新的API中包含大部分代码。作为旁注-MRUnit使用新的API、.mapreduce。所以如果你在代码中使用.mapred,它会抛出错误。作为对Hadoop当前版本(2.1.0 beta版)的一个小更新,旧API被声明为稳定的,没有被弃用:也许我们可以将其变成社区wiki@praveensripatide,因为缺少
    @弃用的
    注释,我已经使用旧的API两年了,甚至都不知道有新的API存在(当我开始使用它的时候已经2年了:我应该一直使用它)。我昨天才发现,因为我想要使用的
    OutputFormat
    是为新的API编写的,现在我必须更改所有内容。我已经习惯了编译器告诉我一些东西是否被弃用,而不是community alopic.org.apache.hadoop.mapred是旧的API,org.apache.hadoop.mapreduce是新的API。您可能需要更改答案。此外,JobConf是MapRedAPI的一部分,而不是MapReduceAPI