【Hadoop】新旧Java MapReduce API的差异

本文对比了Hadoop新旧API的主要区别,包括类结构、上下文对象使用、配置方式等,新API提供了更好的扩展性和统一性。

Hadoop在0.20.0版本中第一次使用新的API,部分早期的0.20.0版本不支持使用旧的API,但在接下来的1.x和2.x版本中新旧API都可以使用。

新旧API的差异主要有以下几点:

1. 新API倾向于使用虚类,而不是接口,因为更有利于扩展。在旧的API中使用Mapper和Reducer接口,而在新的API中使用虚类。

2. 新的API放在org.apache.hadoop.mapreduce包(和子包)中,旧的API放在org.apache.hadoop.mapred中。

3. 新API充分使用上下文对象,使用户代码能与MapReduce系统通信。例如,新的Context基本统一了旧API的JobConf、OutputCollector和Reporter的功能。

4. 键/值对记录在这两类API中都被推给mapper和reducer,但除此之外,新的API通过重写run()方法允许mapper和reducer控制执行流程。

5. 新的API中作业控制由Job类实现,而非旧API中的JobClient类,新的API中删除了JobClient类。

6. 新增的API实现了配置的统一。旧API通过一个特殊的JobConf对象配置作业,该对象是Hadoop配置对象的一个扩展。在新的API中,作业的配置由Configuration来完成。

7. 输出文件的命名方式稍有不同。在旧的API中map和reduce的输出被统一命名为part-nnmm,但在新的API中map的输出文件名为part-m-nnnnnn,而reduce的输出文件名为part-r-nnnnn(其中nnnnn是从0开始的表示分块序号的整数)。

8. 新API中的用户重载函数被声明为抛出异常java.lang.InterruptedException。这意味着可以用代码来实现中断响应。

9.在新的API中,reduce()传递的值是java.lang.Iterable类型的,而非旧API中传递的java.lang.Iterator类型。这一改变使我们更容易通过java的for-each循环结构来迭代这些值。


----本文摘于《Hadoop权威指南第三版》,章节2.3.2.2

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值