你好,游客 登录
背景:
阅读新闻

Hadoop从入门到精通之 如何从Hadoop1.x转到Hadoop2.x

[日期:2014-04-11] 来源:帮客网  作者: [字体: ]

Hello 大家好,我是stefan,今天来和大家分享下如何将hadoop1.x迁移至Hadoop2.x。这篇博文提供了将Hadoop MapReduce应用从Hadoop1.x迁移到Hadoop2.x的方法。

 

在2.x的版本中,apache将resource management剥离出来集成到Hadoop YARN里了,目的在于将application management框架分开使得MapReduce依然是一个纯粹的分布式计算框架。

一般情况下,由于早版本的MapReduce在新的框架(YARN)设计时被尽量重用了,因此YARN对MRv1保持向下兼容。不过由于一些改进和代码重构,少部分API借口提供了向后兼容。

 

1、对二进制程序的兼容性

首先,我们要确保使用旧mapred的API的应用程序二进制兼容性。也就是说用MRv1构建的应用不需要重新编译,就可以跑在YARN上。只需要通过配置来将应用程序部署到Hadoop2.x的集群上。

2、源代码兼容性

我们不能完全确保二进制程序兼容性由于上一个版本到现在YARN版本已经改进了很多地方。但是我们可以确保用YARN版本的MapReduce重新编译的程序是稳定的。所以大家最好用新的api重新编译一下自己的程序。

3、不支持的东西

MRAdmin在YARN版中已经被删除,因为mradmin命令不存在了。YARN中用rmadmin中的命令替代了他。如果直接使用这个类的应用不管是二进制程序还是源代码都会出错。

4、MRv1用户和YARN用户之间的平衡

可惜完美的兼容是不存在的,保持对MRv1的二进制程序的兼容会导致早起MRv2的二进制程序的不兼容问题,特别是0.23版本的用户(尽量不要使用这个版本咯)。对于MapReduce的api我们兼容MRv1的应用程序,因为用户群比较广泛,下表是Hadoop0.23中不兼容api的列表:

 

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 toTaskID
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[] toString[]
org.apache.hadoop.mapreduce.filecache.DistributedCache#getFileTimestamps Return type changes from long[] toString[]
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 fromo.a.h.mapred.TaskCompletionEvent[] too.a.h.mapreduce.TaskCompletionEvent[]

 

注意事项:如果想在YARN上运行Hadoop-examples-1.x.x.jar(之前版本的示例代码),那么可以去MapReduce文件夹下运行hadoop-mapreduce-examples-2.x.x.jar。
默认下Hadoop 框架的jar包在classpath中出现在用户jar包的前面,使得2.x.x的jar包会始终被获取到。用户需要将hadoop-mapreduce-examples-2.x.x.jar从集群中的所有节点的classpath中去除掉。或者我们可以设置HADOOP_USER_CLASSPATH_FIRST=true 并且 HADOOP_CLASSPATH=...:hadoop-examples-1.x.x.jar来运行我们自己的jar包,并且在mapred-site.xml中加入下面的配置项来使得YARN容器也选择我们自己的jar包。

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

好了今天的Hadoop讲解就到这里,转载请注明出处:http://blog.csdn.net/guoshenglong11/article/details/22728223,欢迎大家关注我的博客。




收藏 推荐 打印 | 录入: | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款