如何克服hadoop中的java.lang.IncompatibleClassChangeError

时间:2015-02-04 05:41:24

标签: java eclipse maven hadoop jar

我得到IncompatibleClassChangeError :: Found接口org.apache.hadoop.mapreduce.TaskAttemptContext,但是类是预期的。我使用了着色插件和Main类插件,即

  Mainclass plugin:
==================     

 <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.calsoftlabs.ndt.PcapMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

shaded plugin:
============
    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.7.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <artifactSet>
                            signed jars
                                 <excludes>
                                    <exclude>bouncycastle:bcprov-jdk15</exclude>
                                </excludes>
                            </artifactSet>

                             <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    Main class
                                    <mainClass>com.calsoftlabs.ndt.PcapMain</mainClass>
                                </transformer>

                         </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin> 

我有两个罐子: 1)original-PCAPSample-0.0.1-SNAPSHOT.jar - &gt;由于带阴影的插件 2)PCAPSample-0.0.1-SNAPSHOT.jar - &gt;由于Main类插件

---&gt;当我使用着色的插件jar时,我在线程“main”中遇到异常java.lang.ClassNotFoundException:pcap

---&GT;当我使用第二个jar时,我得到了IncompatibleClassChangeError

---&gt;实际上我正在尝试使用此网址https://github.com/RIPE-NCC/hadoop-pcap/blob/master/hadoop-pcap-lib/src/main/java/net/ripe/hadoop/pcap/io/PcapInputFormat.java

中的pcapInputFormat类

---&GT;我在我的pom.xml中添加了hadoop-pcap-lib(来自上面指定的url)依赖项并尝试使用该PcapInputFormat

---&gt;我现在可以做些什么来克服这个问题。任何人都可以就此问题提出建议......

1 个答案:

答案 0 :(得分:0)

TaskAttemptContext已从Hadoop 1中的类更改为Hadoop 2中的接口。很明显,您使用的jar是针对Hadoop 1 API构建的,尽管他们声称相反,但Hadoop 2除了最简单的应用程序之外,它不向后兼容。