问题导读
1、如何从 Hadoop 1.x 迁移应用到Hadoop 2.x ?
2、什么是Binary 兼容性?
3、为什么在集群中所有节点的classpath中应该删除 hadoop-mapreduce-examples-2.x.x.jar?
简介
本文档对从 Apache Hadoop 1.x 迁移他们的Apache Hadoop MapReduce 应用到 Apache Hadoop 2.x 的用户提供了一些信息。
在 Apache Hadoop 2.x 中,我们已经把资源管理功能放入 分布式应用管理框架 的Apache Hadoop YARN,而 Apache Hadoop MapReduce (亦称 MRv2) 保持为一个纯分布式计算框架。
总之,之前的 MapReduce 运行时 (亦称 MRv1) 已经被重用并且不会有重大功能放在其上(?)。因此,MRv2 可以确保与MRv1 应用之间的兼容性。然而,由于一些改进和代码重构,一些API已经导致后向不兼容。
本页的剩余部分将讨论在Apache Hadoop MapReduce 2.x (MRv2)中我们支持的后向兼容的范围和级别。
Binary 兼容性
首先,我们确保对使用旧的mapred的应用二进制兼容。这意味着使用 MRv1 mapred API 创建的应用不用重新编译就可直接在YARN上运行,仅仅需要通过配置把它们指向一个 Apache Hadoop 2.x 集群。
Source 兼容性
我们不能确保使用mapreduce API的应用的二进制兼容,因为这些API从MRv1起已经改变了很多。然而,我们确保对mapreduce API 的兼容性。换句话说,用户可以用MRv2的mapreduce API 重新编译他们的应用。一个显著的二进制不兼容是 Counter 和 CounterGroup。
不支持的
在MRv2 中 MRAdmin 已经被删除了,因为 mradmin 命令不存在了。他们已经被 rmadmin 中的命令代替了。我们不支持直接使用这个类的二进制或源码。
MRv1 用户和早期的 MRv2 适应者间的折中
不幸的是,维持对MRv1应用的二进制兼容可能导致MRv2的早期适应者的二进制不兼容问题,特别是Hadoop 0.23 用户。对于 mapred APIs, 有一大批的用户,我们已经选择兼容MRv1应用。对于 mapreduce APIs, 如果他们不显示地使用 Hadoop 0.23 应用,我们仍然是他们与MRv1应用兼容。下面是与Hadoop 0.23不兼容的 MapReduce APIs 列表。
问题函数 | | 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[] |
Malicious
对于将要在YARN上试用 hadoop-examples-1.x.x.jar 的用户,请注意 hadoop -jar hadoop-examples-1.x.x.jar 还是会使用 hadoop-mapreduce-examples-2.x.x.jar, 其与其他的 MRv2 jars 一同安装. 默认地, Hadoop 框架包在classpath中出现在用户的jar之前,以便2.x.x 包中的类仍会被选中。用户在集群中的所有节点的classpath中应该删除 hadoop-mapreduce-examples-2.x.x.jar 。否则,用户应该设置 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>
复制代码
|