Hadoop新旧API的区别和联系
来源:互联网 发布:php redis 使用 编辑:程序博客网 时间:2024/05/01 13:00
(1)存放位置
旧版API 放在org.apache.hadoop.mapred 包中,而新版API 则放在org.apache.hadoop.mapreduce 包及其子包中。
(2)接口变为抽象类
接口通常作为一种严格的“协议约束”。它只有方法声明而没有方法实现,且要求所有实现类(不包括抽象类)必须实现接口中的每一个方法。接口的最大优点是允许一个类实现多个接口,进而实现类似C++ 中的“多重继承”。抽象类则是一种较宽松的“约束协议”,它可为某些方法提供默认实现。而继承类则可选择是否重新实现这些方法。正是因为这一点,抽象类在类衍化方面更有优势,也就是说,抽象类具有良好的向后兼容性,当需要为抽象类添加新的方法时,只要新添加的方法提供了默认实现,用户之前的代码就不必修改了。
考虑到抽象类在API 衍化方面的优势, 新API 将InputFormat、OutputFormat、Mapper、Reducer 和Partitioner 由接口变为抽象类。
(3)上下文封装
新版API 将变量和函数封装成各种上下文(Context)类,使得API 具有更好的易用性和扩展性。首先,函数参数列表经封装后变短,使得函数更容易使用;其次,当需要修改或添加某些变量或函数时,只需修改封装后的上下文类即可,用户代码无须修改,这样保证了向后兼容性,具有良好的扩展性。
这些Context 各自封装了一种实体的基本信息及对应的操作(setter 和getter 函数),如JobContext、TaskAttemptContext 分别封装了Job 和Task 的基本信息,TaskInputOutputContext 封装了Task 的各种输入输出操作,MapContext 和ReduceContext 分别封装了Mapper 和Reducer 对外的公共接口。如下图所示:
除了以上三点不同之外,新旧API 在很多其他细节方面也存在小的差别。
由于新版和旧版API 在类层次结构、编程接口名称及对应的参数列表等方面存在较大差别,所以两种API 不能兼容。但考虑到应用程序的向后兼容性,短时间内不会将旧API
从MapReduce 中去掉。即使在完全采用新API 的0.21.0/0.22.X 版本系列中,也仅仅将旧API 标注为过期(deprecated),用户仍然可以使用。
旧API 作业配置实例:
JobConf job = new JobConf(new Configuration(), MyJob.class);
job.setJobName("myjob");
job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);
JobClient.runJob(job);
新API 作业配置实例:
Configuration conf = new Configuration();
Job job = new Job(conf, "myjob ");
job.setJarByClass(MyJob.class);
job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
从以上两个实例可以看出,新版API 用Job 类代替了JobConf 和JobClient 两个类,这样,仅使用一个类的同时可完成作业配置和作业提交相关功能,进一步简化了作业编写方式
原文引自《Hadoop技术内幕-深入解析Mapreduce框架设计与实现原理》
- Hadoop新旧API的区别和联系
- hadoop的新旧api
- Hadoop MapReduce新旧API区别
- Hadoop学习笔记二(新旧版本API的区别)
- [hadoop源码阅读][3]-新旧api区别
- Hadoop新旧API区别2<转>
- 【Hadoop】新旧Java MapReduce API的差异
- Hadoop 新旧API对比
- Hadoop和Spark的联系和区别
- mapreduce 新旧API 区别
- MR新旧API区别
- mapreduce 新旧API 区别
- 数据库与hadoop的区别和联系
- API 和 SDK的区别与联系
- Hadoop 新旧MapReduce API比较
- 运行时库函数和API函数的区别和联系
- Hadoop、MapReduce、YARN和Spark的区别与联系
- lucene nutch solr及hadoop的区别和联系
- 使用PyInstaller2将Python脚本转化为可执行文件(下-进阶使用)
- HDU3415:Max Sum of Max-K-sub-sequence(单调队列)
- 解决网络安全问题软件解析之UserLock
- 模式和框架的区别
- 策略模式(StrategyPattern)
- Hadoop新旧API的区别和联系
- 问题列表 java
- 建立英语思维
- linux网络socket 接口
- poj 1087 A Plug for UNIX(最大流)
- IE条件注释
- 投资内容简介
- 职场英语:人生道理在职场中的真义
- [sgu]Telecasting station【三分】