你好,游客 登录 注册 搜索
背景:
阅读新闻

Apache Hadoop 2.2.0 MapReduce1.x向2.x迁移

[日期:2014-06-15] 来源:Linux社区  作者:Linux [字体: ]

Hadoop的2.x中我们引入了一个资源管理器,一个分布式应用的管理框架,同时MRv2仍然是一个纯净的分布式计算框架。

总的来讲,以前的MR应用(MRv1)仍然支持不需要做任何修改。因此MRv2仍然大部分支持MRv1的应用,不过仍然需要代码改进和重构,一些api将被不推荐使用。

余下部分将会讨论MRv2的向后兼容能力。

--------------------------------------分割线 --------------------------------------

Ubuntu 13.04上搭建Hadoop环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu上搭建Hadoop环境(单机模式+伪分布模式) http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu下Hadoop环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建Hadoop环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

--------------------------------------分割线 --------------------------------------

二进制兼容

首先基于旧mapred api的二进制程序兼容意思是说这些应用程序是基于MRv1的api编译构建的,那么他们不需要做任何修改就可以在MRv2上运行。仅仅需要指明hadoop2.x的配置文件。

源文件兼容

我们不能确定基于mapreduce构建的二进制文件是否能兼容,毕竟这些api基于MRv1变化很大。不过我们可以肯定的是基于mapreduce从新构建二进制文件是兼容的,换句话说用户可以基于mapreduce重新构建他们的二进制文件,一个需要注意的不兼容地方是Counter 和CounterGroup。

不支持

MRAdmin在MRv2中已经被删除。因为mradmin 命令已经不存在了。他被rmadmin替换掉了,我们不支持二进制直接使用了此类。

MRv1用户和MRv2早期用户权衡

不幸的是保持MRv1二进制兼容问题会导致MRv2早期用户(hadoop 0.23用户)二进制不兼容问题。对于mapred api我们选择兼容MRv1应用,因为他们的用户比较庞大。对于mapreduce api用户没有采用hadoop 0.23的应用我们仍然让他们兼容MRv1的应用,如下罗列的是MapReduce api不兼容hadoop 0.23:

Problematic Function Incompatibility Issue
org.apache.hadoop.util.ProgramDriver#drive Return type changes from void to int
org.apache.hadoop.mapred.jobcontrol.Job#getMapredJobID Return type changes from String to JobID
org.apache.hadoop.mapred.TaskReport#getTaskId Return type changes from String to TaskID
org.apache.hadoop.mapred.ClusterStatus#UNINITIALIZED_MEMORY_VALUE Data type changes from long to int
org.apache.hadoop.mapreduce.filecache.DistributedCache#getArchiveTimestamps Return type changes from long[] to String[]
org.apache.hadoop.mapreduce.filecache.DistributedCache#getFileTimestamps Return type changes from long[] to String[]
org.apache.hadoop.mapreduce.Job#failTask Return type changes from void to boolean
org.apache.hadoop.mapreduce.Job#killTask Return type changes from void to boolean
org.apache.hadoop.mapreduce.Job#getTaskCompletionEvents Return type changes from o.a.h.mapred.TaskCompletionEvent[] too.a.h.mapreduce.TaskCompletionEvent[]

蓄意

用户在YARN上运行 hadoop-examples-1.x.x.jar,需要注意的是hadoop -jar hadoop-examples-1.x.x.jar仍然采用的是hadoop-mapreduce-examples-2.x.x.jar,他跟其他MRv2安装在一起。默认hadoop的jar优先于用户的jar加载也就是说2.x.x的会优先执行。用户需要在所有的hadoop节点上移除hadoop-mapreduce-examples-2.x.x.jar 。用户需要设置 HADOOP_USER_CLASSPATH_FIRST=true and HADOOP_CLASSPATH=...:hadoop-examples-1.x.x.jar去执行他们想执行的例子,同时需要在mapred-site.xml配置文件中加入如下信息以便YARN加载此jar:

<property>
 <name>mapreduce.job.user.classpath.first</name>
 <value>true</value>
</property

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-06/103209.htm

linux
相关资讯       Hadoop 2.2.0 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款