Mryqu's Notes


  • 首页

  • 搜索
close

[Hadoop] mapred和mapreduce包的区别

时间: 2013-07-12   |   分类: BigData     |   阅读: 45 字 ~1分钟

背景介绍

在Hadoop的代码中,存在org.apache.hadoop.mapred和org.apache.hadoop.mapreduce两个包。mapred包下是老的API,在Hadoop0.20时被废弃了,引入了新包mapreduce,但是由于新的API迟迟没有完成,所以在Hadoop0.21中取消了mapred包的废弃状态。原来的设想中老包mapred在Hadoop0.22和1.0中将再次设成废弃状态,但时至今日也没有被废弃。

区别

本文将通过WordCount示例代码,介绍一下二者的区别。WordCount示例代码分别取自0.19和0.23.9版本的Hadoop源码。

0.19版WordCount示例

[Hadoop] mapred和mapreduce包的区别

0.23.9版WordCount示例

[Hadoop] mapred和mapreduce包的区别

区别新API老API
包新API位于org.apache.hadoop.mapreduce包内老API位于org.apache.hadoop.mapred.包内
Mapper和Reducer类型新API使用Mapper和Reducer抽象类
抽象类更容易扩展,Hadoop实现可以轻松向其抽象类中添加方法(用默认的实现)而不会对已有Hadoop应用造成影响
老API使用Mapper和Reduceer接口
使用对象新API使用Configuration和一些Helper类完成作业配置;
新API使用Job完成作业控制;
新API使用Context完成用户代码与MapReduce系统的通信。
老API使用JobConf
完成作业配置,它是Configuration子类;
![[Hadoop]?mapred和mapreduce包的区别](/images/2013/7/0026uWfMzy78EeY1A9Ge0.png)
老API使用JobClient完成作业控制;
老API使用OutputCollector和Reporter完成用户代码与MapReduce系统的通信。
方法map() reduce() clearup() setup() run();
所有方法可抛IOException或InterruptedException;
Reduce()输入值为java.lang.Iterable;键值对输出通过Context对象的write方法实现;
map() reduce();
所有方法可抛IOException;
Reduce()输入值为java.lang.Iterator;
键值对输出通过OutputCollector对象的collect方法实现;
输出文件part-m-nnnnn和part-r-nnnnn
(nnnnn为从0开始的整数)
part-nnnnn

注意事项

尽量使用新API。在mapred和mapreduce两个包下存在FileInputFormat、FileOutputFormat等名字一样的类,如果引入错误的话,程序会无法通过编译。

参考

Upgrading To The New Map Reduce API
Difference between Hadoop OLD API and NEW API

标题:[Hadoop] mapred和mapreduce包的区别
作者:mryqu
声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

#hadoop# #mapred# #mapreduce# #package# #difference#
git资料
Eclipse RCP资料
  • 文章目录
  • 站点概览

Programmer & Architect

662 日志
27 分类
1472 标签
GitHub Twitter FB Page
    • 背景介绍
    • 区别
    • 注意事项
    • 参考
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%