1.基本概念

MRv1是Hadoop 1.0中的MapReduce实现,它由编程模型(新旧编程接口)、运行时环境(由JobTracker和TaskTracker组成)和数据处理引擎(MapTask和ReduceTask)三部分组成。该框架在扩展性、容错性(JobTracker单点)和多框架(仅支持MapReduce一种计算)等支持方面支持不足。

MRv2是Hadoop 2.0中的MapReduce实现,它的编程模型和数据处理引擎源码级重用了MRv1的实现,但运行时环境由YARN和ApplicationMaster组成,其中YARN是一个全新的资源管理系统,而正是由于它的通用性,MRv2的核心已经从单一的MapReduce计算框架转移为资源管理系统YARN,即形成了以YARN为核心的统一框架管理体系,ApplicationMaster则负责MapReduce作业的数据切分、任务划分、资源申请和任务调度与容错等工作。

不管在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自身拥有更好的封装,在兼容性和扩展性方面更优。

总结起来,采用MRv1 旧API编写的应用程序,可直接使用之前的jar包将程序运行在MRv2上;但采用MRv1 新API编写的应用程序则不可以,需要使用MRv2编程库重新编译并修改不兼容的参数和返回值,MRv2对API的修改主要集中在函数参数和返回值上,具体如下:

原创文章,转载请注明: 转载自董的博客

本文链接地址: 浅析MRv1与MRv2的API兼容性分析

微信公众号:hadoop-123,专注于大数据技术分享,欢迎加入!

说点什么

avatar
  Subscribe  
提醒