Hadoop MapReduce概念学习系列之新旧 MapReduce API 比较(四)

简介:

 从 0.20.0 版本开始,Hadoop 同时提供了新旧两套 MapReduce API。新 API 在旧 API 基础上进行了封装,使得其在扩展性和易用性方面更好。新旧版 MapReduce API 的主要区 别如下。

  (1)存放位置

   旧版 API 放在 org.apache.hadoop.mapred 包中,而新版 API 则放在 org.apache.hadoop. mapreduce 包及其子包中

  (2)接口变为抽象类

   接口通常作为一种严格的“协议约束”。它只有方法声明而没有方法实现,且要求所有实 现类(不包括抽象类)必须实现接口中的每一个方法。接口的最大优点是允许一个类实现多 个接口,进而实现类似 C++ 中的“多重继承”。抽象类则是一种较宽松的“约束协议”,它可 为某些方法提供默认实现。而继承类则可选择是否重新实现这些方法。正是因为这一点,抽 象类在类衍化方面更有优势,也就是说,抽象类具有良好的向后兼容性,当需要为抽象类添 加新的方法时,只要新添加的方法提供了默认实现,用户之前的代码就不必修改了。

  考虑到抽象类在API衍化方面的优势,新API在InputFormat、OutputFormat、Mapper、Reducer和Partitioner由接口变成抽象类

  (3)上下文封装

  新版 API 将变量和函数封装成各种上下文(Context)类,使得 API 具有更好的易用性 和扩展性。首先,函数参数列表经封装后变短,使得函数更容易使用 ;其次,当需要修改 或添加某些变量或函数时,只需修改封装后的上下文类即可,用户代码无须修改,这样保 证了向后兼容性,具有良好的扩展性。

                  

   上图展示了新版API中树形的Context 类继承关系。这些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),用户仍然可以使用。

 

 


本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5058689.html,如需转载请自行联系原作者

相关文章
|
5月前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
207 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
7月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
161 2
|
5月前
|
人工智能 数据可视化 API
自学记录鸿蒙API 13:Calendar Kit日历功能从学习到实践
本文介绍了使用HarmonyOS的Calendar Kit开发日程管理应用的过程。通过API 13版本,不仅实现了创建、查询、更新和删除日程等基础功能,还深入探索了权限请求、日历配置、事件添加及查询筛选等功能。实战项目中,开发了一个智能日程管理工具,具备可视化管理、模糊查询和智能提醒等特性。最终,作者总结了模块化开发的优势,并展望了未来加入语音助手和AI推荐功能的计划。
283 1
|
5月前
|
数据采集 分布式计算 Hadoop
使用Hadoop MapReduce进行大规模数据爬取
使用Hadoop MapReduce进行大规模数据爬取
|
7月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
220 0
|
7月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
95 0
|
7月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
138 0
|
数据采集 分布式计算 搜索推荐
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(一)
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(一)
|
存储 分布式计算 Hadoop
Hadoop基础学习---6、MapReduce框架原理(一)
Hadoop基础学习---6、MapReduce框架原理(一)
|
存储 分布式计算 Hadoop
【Hadoop】一个例子带你了解MapReduce
【Hadoop】一个例子带你了解MapReduce
160 1

热门文章

最新文章