Hello 大家好,我是stefan,今天来和大家分享下如何将Hadoop1.x迁移至Hadoop2.x。这篇博文提供了将Hadoop MapReduce应用从Hadoop1.x迁移到Hadoop2.x的方法。
&">nbsp;
在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 FunctionIncompatibility Issueorg.apache.hadoop.util.ProgramDriver#driveReturn type changes from void to intorg.apache.hadoop.mapred.jobcontrol.Job#getMapredJobIDReturn type changes from String to JobIDorg.apache.hadoop.mapred.TaskReport#getTaskIdReturn type changes from String toTaskIDorg.apache.hadoop.mapred.
ClusterStatus#UNINITIALIZED_MEMORY_VALUEData type changes from long to intorg.apache.hadoop.mapreduce.filecache.DistributedCache#getArchiveTimestampsReturn type changes from long[] toString[]org.apache.hadoop.mapreduce.filecache.DistributedCache#getFileTimestampsReturn type changes from long[] toString[]org.apache.hadoop.mapreduce.Job#failTaskReturn type changes from void to booleanorg.apache.hadoop.mapreduce.Job#killTaskReturn type changes from void to booleanorg.apache.hadoop.mapreduce.Job#getTaskCompletionEventsReturn 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,欢迎大家关注我的博客。