于2017-03-26由小牛君创建
MRv1是Hadoop 1.0中的MapReduce实现,它由编程模型(新旧编程接口)、运行时环境(由JobTracker和TaskTracker组成)和数据处理引擎(MapTask和ReduceTask)三部分组成。该框架在扩展性、容错性(JobTracker单点)和多框架(仅支持MapReduce一种计算)等支持方面支持不足。关于MRv1的内部实现,可阅读我的最新书籍《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》。
MRv2是Hadoop 2.0中的MapReduce实现,它在源码级重用了MRv1的编程模型和数据处理引擎实现,但运行时环境由YARN和ApplicationMaster组成,其中YARN是一个全新的资源管理系统,而正是由于它的通用性,MRv2的核心已经从单一的MapReduce计算框架转移为资源管理系统YARN,即形成了以YARN为核心的统一框架管理体系,ApplicationMaster则负责MapReduce作业的数据切分、任务划分、资源申请和任务调度与容错等工作(可阅读我的最新书籍《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》中的第12章了解ApplicationMaster实现。)。
不管在MRv1还是MRv2中,MapReduce应用程序编程接口(API)是一致的。为了能够让用户应用程序平滑迁移到Hadoop 2.0中,MRv2尽可能得保证编程接口的向后兼容性,但由于MRv2本身进行了改进和优化,它在向后兼容性方面存在少量问题,而这正是本文所要介绍的。
2. 应用程序编程接口兼容性
MRv2编程接口兼容性的讨论相关的Hadoop jira链接是:https://issues.apache.org/jira/browse/MAPREDUCE-5108。
我们都知道,MapReduce应用程序编程接口有两套,分别是新API(mapred)和旧API(mapredue),它们的性能没有差异(因此内核实现相同),不同之处仅在于编程接口的定义,新API自身拥有更好的封装,在兼容性和扩展性方面更优。关于MapReduce新旧API介绍和对比可阅读我的最新书籍《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》中的第3章 “MapReduce编程模型”。
总结起来,采用MRv1 旧API编写的应用程序,可直接使用之前的jar包将程序运行在MRv2上;但采用MRv1 新API编写的应用程序则不可以,需要使用MRv2编程库重新编译并根据编译错误提示修改不兼容的参数和返回值,MRv2对API的修改主要集中在函数参数和返回值上,具体如下:
在线咨询
免费热线
资料发放
技术答疑
关注微信