2014-04-11 00:00:00
来 源
中存储网
Hadoop
Hello 大家好,我是stefan,今天来和大家分享下如何将Hadoop1.x迁移至Hadoop2.x。这篇博文提供了将Hadoop MapReduce应用从Hadoop1.x迁移到Hadoop2.x的方法。在2.x的版本中,apache将resource

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,欢迎大家关注我的博客。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。