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

mom*_*o13 45 hadoop mapreduce

要创建MapReduce作业,您可以使用旧org.apache.hadoop.mapred包或org.apache.hadoop.mapreduceMapper和Reducers,Jobs ... 的新包.第一个已被标记为已弃用但同时也已恢复.现在我想知道使用旧的mapred包或新的mapreduce包来创建作业以及为什么更好.或者它只取决于您是否需要像旧的mapred包中可用的MultipleTextOutputFormat之类的东西?

Pra*_*ati 43

功能方面,old(o.a.h.mapred)和new(o.a.h.mapreduce)API 之间没有太大区别.唯一显着的区别是记录被推送到旧API中的mapper/reducer.虽然新的API支持拉/推机制.您可以在此处获取有关拉动机制的更多信息.

此外,旧的API 自0.21以来一直未被弃用.您可以在此处找到有关新API的更多信息.

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

  • 有没有理由为什么javadocs没有提到任何这个? (4认同)
  • 由于缺少`@ deprecated`注释,我已经使用旧的API 2年了,甚至不知道存在新的API(我开始时已经2年了:我应该一直使用它) .我昨天才发现因为我想要使用的`OutputFormat`是为新API编写的,现在我必须改变一切.我已经习惯了编译器告诉我某些东西是否被弃用,而不是社区民俗. (4认同)
  • [Hadoop - The Definitive Guide](http://shop.oreilly.com/product/0636920021773.do)包含新API中的大部分代码. (3认同)
  • 作为旁注 - MRUnit使用新的API .mapreduce.因此,如果您在代码中使用.mapred,则会抛出错误.而且你不会快乐. (3认同)

Har*_*non 14

旧API和新API都很好.新API虽然更干净.尽可能使用新API,并在需要新API中不存在的特定类的地方使用旧API(如MultipleTextOutputFormat)

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