使用Hadoop2的Hadoop MRUnit异常

时间:2013-10-18 18:22:43

标签: maven hadoop

我正在尝试使用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>   

1 个答案:

答案 0 :(得分:1)

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

事实上你的pom.xml证实了这一点。 hadoop-core是一个1.x工件。您将在2.x中使用hadoop-common之类的内容。