• Hadoop编程笔记(二):Hadoop新旧编程API的区别


    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.cnblogs.com/beanmoon/archive/2012/12/06/2804905.html

  • 相关阅读:
    如何使用谷歌的网页删除请求工具?
    已有记录表添加特定排序主键ID
    用ASP实现超长内容的word模板替换objDoc.Content.Find.Execute
    内网SMTP发送失败的曲线救国之策
    IIS无法在后台生成WORD文件的故障
    WINDOWS2003进行WindowsFTP设置的一些注意事项
    解决IISASP调用XmlHTTP出现msxml3.dll (0x80070005) 拒绝访问的错误
    [转]Cate:我是如何准备Google面试的
    Ubuntu的启动配置文件grub.cfg(menu.lst)设置指南
    Linux启动过程详解
  • 原文地址:https://www.cnblogs.com/beanmoon/p/2804905.html
Copyright © 2020-2023  润新知