0

我正在尝试使用 MRUnit 对 Hadoop2 进行测试,但出现以下错误:

java.lang.IncompatibleClassChangeError: Found class org.apache.hadoop.mapreduce.TaskInputOutputContext, but interface was expected

我在 Stack Overflow 上看到了其他几个答案,但大多数似乎与在 Hadoop1 和 Hadoop2 的 pom.xml 文件中包含多个配置有关的问题。

有人对可能导致这种情况的原因有任何见解吗?

我的 pom.xml 文件如下:

 <dependencies>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.github.davidmoten</groupId>
    <artifactId>geo</artifactId>
    <version>0.6.5</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>activation</artifactId>
    <version>1.0.2</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.11</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    </dependency>   
<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>1.0.0</version>
    <classifier>hadoop2</classifier>
    <scope>test</scope>
</dependency>   

4

1 回答 1

2

这意味着您实际上并没有在 Hadoop 2 上运行。TaskInputOutputContext接口是 2.x,但它说它认为它是一个类。

事实上,你pom.xml证实了这一点。hadoop-core是 1.x 的神器。您将使用hadoop-common2.x 中的内容。

于 2013-10-18T23:02:03.003 回答