使用mapred或mapreduce包创建Hadoop作业更好吗?
要创建MapReduce作业,您可以使用旧的使用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.
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)
阶级
但是它同时被还原了
你确定吗?例如,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