设为首页 收藏本站
查看: 753|回复: 0

[经验分享] Hadoop编程笔记(二):Hadoop新旧编程API的区别

[复制链接]
累计签到:11 天
连续签到:1 天
发表于 2015-7-11 08:46:24 | 显示全部楼层 |阅读模式
  Hadoop Release 0.20.0的API包括了一个全新的API:Context,有时候也称为上下文对象,此对象的设计使得在未来进行扩展更加容易。 后续的hadoop版本--如1.x--已经完成了大部分的API 更新。新的API类型上不兼容以前的API,所以以前的应用程序需要重写才能使新的API发挥其作用 。
  新的API和旧的API之间有下面几个明显的区别:
  1. 新的API倾向于使用抽象类,而不是接口,因为这更容易扩展。例如,你可以添加一个方法(附带默认的实现)到一个抽象类而不需修改类之前的实现方法。在新的API中,Mapper和Reducer是抽象类。有关更多抽象类与接口的区别请参见这里
  2. 新的API是在org.apache.hadoop.mapreduce包(及其子包)中的。之前版本的API则是放在org.apache.hadoop.mapred中的。
  3. 新的API广泛使用context object(上下文对象),并允许用户代码通过context对象与MapReduce系统进行通信。例如,Context基本上充当着旧版本API中JobConf、OutputCollector和Reporter的角色。
  4. 两个版本的API 键值对记录都会传递给mapper和reducer进行处理,但额外的,新API允许mapper和reducer通过重写run()方法的方式更多的控制其执行过程。例如,记录可以成批的被处理;执行过程可以在所有记录被处理完之前被中断。在旧API中,或许通过一个MapRunnable接口的实现可以为map任务达成同样的目的, 但对于reduce任务却是不行的。
  5. 在新API中作业是通过Job类来控制的,而不是旧API中的JobClient(在新API中已经不存在了)。
  6. 新的API统一了配置。旧的API有一个特殊的JobConf对象用于作业配置,这是对于Hadoop的通常的Configuration对象的扩展。在新的API中,这种区别没有了,所以作业配置通过Configuration来完成,有时可能需要Job上的一些帮助方法(helper method)。
  7. 输出文件的命名稍微有了差别:旧API中map和reduce的输出文件都是以part-nnnnn的方式来命名的,而在新API中map的输出文件是通过part-m-nnnnn, reduce的输出文件是通过part-r-nnnnn的方式来命名的(从零开始计数)。
  8. 新API要求用户重写的方法应抛出InteruptedException异常,这意味着你可以编写自己的代码来处理这种异常,从而使框架如果需要的话能够更优雅的结束长时间运行的操作。
  9. 在新API中,reduce()函数接收到的值类型是java.lang.Interable, 而不是java.lang.Iterator(旧API中使用这个),这个改变使得使用java的for-each循环能更加容易地遍历输入值: for(VALUE value : values) {......}
  注意:
  当把你的Mapper和Reducer类转换到新API中时,别忘了把相应的map()、reduce()方法中的参数也改过来。只改变你的实现类继承自Mapper或Reducer类(旧API中两者是继承自MapReduceBase)是不行的(虽然并不会报编译时错误或警告,因为Mapper或Reducer类分别提供了与MapReduceBase类名字相同的map()和reduce()函数,这会是一个很隐蔽的bug),这样的话你在map()或reduce()方法中的代码并不会执行,因为框架找不到新API中的map()和reduce()函数(参数不匹配)。
给你的map()或reduce()函数加上@Override注解,java编译器就会在编译期报错了,这样可以确保正确。
  转载请注明出处:http://www.iyunv.com/beanmoon/archive/2012/12/06/2804905.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85363-1-1.html 上篇帖子: Hadoop入门学习笔记---part2 下篇帖子: 在stacklab上搭建Hadoop平台
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表