本文档对从 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)中我们支持的后向兼容的范围和级别。
首先,我们确保对使用旧的mapred的应用二进制兼容。这意味着使用 MRv1 mapred API 创建的应用不用又一次编译就可直接在YARN上执行。只须要通过配置把它们指向一个 Apache Hadoop 2.x 集群。
我们不能确保使用mapreduce API的应用的二进制兼容,由于这些API从MRv1起已经改变了非常多。然而,我们确保对mapreduce API 的兼容性。
换句话说,用户能够用MRv2的mapreduce API 又一次编译他们的应用。一个显著的二进制不兼容是 Counter 和 CounterGroup。
在MRv2 中 MRAdmin 已经被删除了。由于 mradmin
命令不存在了。他们已经被 rmadmin 中的命令取代了。我们不支持直接使用这个类的二进制或源代码。
不幸的是,维持对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[] |
对于将要在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>
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。