我正在尝试使用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>
最佳答案
这意味着您实际上并没有在Hadoop 2上运行。TaskInputOutputContext
是2.x的接口(interface),但它表示它认为它是一个类。
实际上,您的pom.xml
确认了这一点。 hadoop-core
是1.x Artifact 。您将在2.x中使用诸如hadoop-common
之类的东西。
关于maven - Hadoop2的Hadoop MRUnit异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19456527/