Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

介绍

本文档为用户提供了将其Apache Hadoop MapReduce应用程序从Apache Hadoop 1.x迁移到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 API 的应用程序具有二进制兼容性。这意味着,建成对MRv1应用mapred的API可以直接纱无需重新编译仅仅通过它们指向一个Apache的Hadoop集群2.X通过配置运行。

源兼容性

我们无法确保与使用mapreduce API 的应用程序完全二进制兼容,因为自MRv1以来,这些API已有很大发展。但是,我们确保打破二进制兼容性的mapreduce API的源兼容性。换句话说,用户应针对MRv2 jar 重新编译使用mapreduce API 的应用程序。Counter和CounterGroup是一个值得注意的二进制不兼容中断。

不支持

由于mradmin命令不再存在,MRv2中的MRAdmin已被删除。它们已被rmadmin中的命令替换。对于直接使用此类的应用程序,我们既不支持二进制兼容性也不支持源兼容性。

MRv1用户和早期MRv2采用者之间的权衡

不幸的是,维护MRv1应用程序的二进制兼容性可能会导致MRv2早期采用者,尤其是Hadoop 0.23用户的二进制不兼容问题。对于映射 API,我们选择与具有较大用户群的MRv1应用程序兼容。对于mapreduce API,如果它们不会严重破坏Hadoop 0.23应用程序,我们仍将其更改为与MRv1应用程序兼容。以下是与Hadoop 0.23不兼容的MapReduce API的列表。

有问题的功能 不兼容问题
org.apache.hadoop.util.ProgramDriver#drive 返回类型从void更改为int
org.apache.hadoop.mapred.jobcontrol.Job#getMapredJobID 返回类型从String更改为JobID
org.apache.hadoop.mapred.TaskReport#getTaskId 返回类型从String更改为TaskID
org.apache.hadoop.mapred.ClusterStatus#UNINITIALIZED_MEMORY_VALUE 数据类型从long更改为int
org.apache.hadoop.mapreduce.filecache.DistributedCache#getArchiveTimestamps 返回类型从long []更改为String []
org.apache.hadoop.mapreduce.filecache.DistributedCache#getFileTimestamps 返回类型从long []更改为String []
org.apache.hadoop.mapreduce.Job#failTask 返回类型从void更改为boolean
org.apache.hadoop.mapreduce.Job#killTask 返回类型从void更改为boolean
org.apache.hadoop.mapreduce.Job#getTaskCompletionEvents 返回类型从oahmapred.TaskCompletionEvent []更改为oahmapreduce.TaskCompletionEvent []

恶意的

对于要在YARN上尝试hadoop-examples-1.xxjar的用户,请注意hadoop -jar hadoop-examples-1.xxjar仍将使用hadoop-mapreduce-examples-2.xxjar,该软件包与其他版本一起安装MRv2罐子。默认情况下,Hadoop框架jar出现在类路径中用户的jar之前,因此仍会选择2.xx jar中的类。用户应从集群中所有节点的类路径中删除hadoop-mapreduce-examples-2.xxjar。否则,用户需要设置HADOOP_USER_CLASSPATH_FIRST = trueHADOOP_CLASSPATH = ...:hadoop-examples-1.xxjar来运行其目标示例jar,并在mapred-site.xml中添加以下配置 使YARN容器中的过程也选择此罐子。

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