Hadoop MRUNIT java.lang.CompatibleClassChangeError

Hadoop MRUNIT java.lang.CompatibleClassChangeError,hadoop,Hadoop,当我运行测试用例时,我得到了这个异常 java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskInputOutputContext, but class was expected at org.apache.hadoop.mrunit.mapreduce.mock.MockContextWrapper.createCommon(MockContextWrapper.j

当我运行测试用例时,我得到了这个异常

 java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskInputOutputContext, but class was expected
    at org.apache.hadoop.mrunit.mapreduce.mock.MockContextWrapper.createCommon(MockContextWrapper.java:53)
    at org.apache.hadoop.mrunit.mapreduce.mock.MockMapContextWrapper.create(MockMapContextWrapper.java:70)
    at org.apache.hadoop.mrunit.mapreduce.mock.MockMapContextWrapper.<init>(MockMapContextWrapper.java:62)
    at org.apache.hadoop.mrunit.mapreduce.MapDriver.run(MapDriver.java:217)
    at org.apache.hadoop.mrunit.MapDriverBase.runTest(MapDriverBase.java:150)
    at org.apache.hadoop.mrunit.TestDriver.runTest(TestDriver.java:137)
    at konnectMR.konnect.mr.MRTestOne.testMapper(MRTestOne.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
java.lang.CompatibileClassChangeError:找到接口org.apache.hadoop.mapreduce.TaskInputOutputContext,但应为类
位于org.apache.hadoop.mrunit.mapreduce.mock.MockContextWrapper.createCommon(MockContextWrapper.java:53)
位于org.apache.hadoop.mrunit.mapreduce.mock.MockMapContextWrapper.create(MockMapContextWrapper.java:70)
位于org.apache.hadoop.mrunit.mapreduce.mock.MockMapContextWrapper.(MockMapContextWrapper.java:62)
位于org.apache.hadoop.mrunit.mapreduce.MapDriver.run(MapDriver.java:217)
位于org.apache.hadoop.mrunit.MapDriverBase.runTest(MapDriverBase.java:150)
位于org.apache.hadoop.mrunit.TestDriver.runTest(TestDriver.java:137)
位于konnectMR.konnect.mr.MRTestOne.testMapper(MRTestOne.java:44)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
位于org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
位于org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
位于org.junit.internal.runners.MethodRoadie.runbeforesthentestthenuter(MethodRoadie.java:87)
位于org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
位于org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
位于org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
位于org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
位于org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
位于org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
位于org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
位于org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
这是POM的依赖项

   <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.4</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.0.3-alpha</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>2.0.3-alpha</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.2.4</version>
</dependency>
<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop1</classifier> 
</dependency>
<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop2</classifier>
</dependency>

朱尼特
朱尼特
4.4
org.apache.hadoop
hadoop通用
2.0.3-α
org.apache.hadoop
hadoop mapreduce客户端核心
2.0.3-α
com.google.code.gson
格森
2.2.4
org.apache.mrunit
mrunit
0.9.0-孵化
hadoop1
org.apache.mrunit
mrunit
0.9.0-孵化
hadoop2
有人能帮我解决这个错误吗?

您添加了两个“org.apache.mrunit”依赖项。第一个“org.apache.mrunit”处于活动状态。这是Hadoop1API。因为您使用的是hadoop2,所以需要删除“org.apache.mrunit”的第一个依赖项。删除以下内容:

<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop1</classifier> 
</dependency>
<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop2</classifier>
    <scope>test</scope>
</dependency>

org.apache.mrunit
mrunit
0.9.0-孵化
hadoop1
考虑到mrunit仅用于单元测试。您可以将第二个依赖项更改为以下内容:

<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop1</classifier> 
</dependency>
<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop2</classifier>
    <scope>test</scope>
</dependency>

org.apache.mrunit
mrunit
0.9.0-孵化
hadoop2
测试

您需要删除最后两个依赖项之一:

<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop1</classifier> 
</dependency>
<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>0.9.0-incubating</version>
    <classifier>hadoop2</classifier>
</dependency>

org.apache.mrunit
mrunit
0.9.0-孵化
hadoop1
org.apache.mrunit
mrunit
0.9.0-孵化
hadoop2
根据您正在使用的Hadoop版本的不同,将依赖项与相应的classifier(hadoop1或hadoop2)保持一致,并删除另一个

此外,考虑使用新版本的MRUn单元,1.1.0在2014六月发布。