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

Posted

技术标签:

【中文标题】使用 mapred 或 mapreduce 包创建 Hadoop 作业哪个更好?【英文标题】:Is it better to use the mapred or the mapreduce package to create a Hadoop Job? 【发布时间】:2011-11-27 17:52:40 【问题描述】:

要创建 MapReduce 作业,您可以使用旧的 org.apache.hadoop.mapred 包或更新的 org.apache.hadoop.mapreduce 包用于 Mappers 和 Reducers,作业...第一个已被标记为已弃用,但同时又恢复了。现在我想知道使用旧的mapred包还是新的mapreduce包创建作业更好,为什么。还是仅仅取决于您是否需要像 MultipleTextOutputFormat 这样的东西,它只在旧的 mapred 包中可用?

【问题讨论】:

but this got reverted meanwhile你确定吗? 例如r0.21.0 中 org.apache.hadoop.mapred.lib 包中的接口映射器未标记为已弃用,而在 r0.20.2 中标记为已弃用。 【参考方案1】:

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

此外,从 0.21 开始,旧 API 一直是 un-deprecated。您可以找到有关新 API here 的更多信息。

正如您提到的,一些类(如 MultipleTextOutputFormat)尚未迁移到新 API,由于这个和上述原因,最好坚持使用旧 API(尽管翻译通常很简单)。

【讨论】:

javadocs 没有提到这些有什么原因吗? Hadoop - The Definitive Guide 拥有新 API 中的大部分代码。 附带说明 - MRUnit 使用新的 API,.mapreduce。因此,如果您在代码中使用 .mapred,它会引发错误。你不会快乐的。 作为对当前 Hadoop 版本(2.1.0 beta)的一个小更新,旧 API 被宣布为稳定并且没有被弃用:hadoop.apache.org/docs/current/api/index.html?org/apache/hadoop/…也许我们可以把它变成一个社区维基@ PraveenSripati 由于缺少 @deprecated 注释,我已经使用旧 API 2 年了,甚至不知道存在新 API(我开始时已经 2 岁了:我应该一直在用)。我昨天才发现,因为我想使用的 OutputFormat 是为新 API 编写的,现在我必须更改所有内容。我已经习惯了编译器告诉我某些东西是否已被弃用,而不是社区民间传说。【参考方案2】:

新旧 API 都很好。新的 API 更简洁。尽可能使用新 API,并在需要新 API 中不存在的特定类的地方使用旧 API(例如 MultipleTextOutputFormat

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

【讨论】:

【参考方案3】:

旧 API(mapred)

    存在于包 org.apache.hadoop.mapred

    提供 map/reduce 作业配置。

    根据迭代器减少给定键的值 包Summary

新 API(mapreduce)

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

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

    根据 Iterable 减少给定键的值

    Package Summary

【讨论】:

org.apache.hadoop.mapred 是旧的 API,而 org.apache.hadoop.mapreduce 是新的。你可能想改变你的答案 另外,JobConf 是 mapred API 的一部分,而不是 mapreduce API

以上是关于使用 mapred 或 mapreduce 包创建 Hadoop 作业哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop中mapred包和mapreduce包的区别

解决 mapreduce.Cluster 无法使用 org.apache.hadoop.mapred.YarnClientProtocolProvider 由于实例化 YarnClient 错误

Hadoop之MapReduce命令

MapR 和 Map Reduce 有啥区别?

Hadoop MapReduce 新旧 mapred 与 mapreduce API

Apache Hadoop YARN 中的“mapreduce.map.memory.mb”和“mapred.map.child.java.opts”之间有啥关系?