CDH4 - 异常:java.lang.IncompatibleClassChangeError:

时间:2013-10-09 23:00:13

标签: java apache-pig cloudera

当我启动一个猪脚本时,我遇到一个java问题,它似乎是一些依赖或版本冲突,运行Debian / Cloudera CDH4 / Apache Pig

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

at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:406)
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.Counter, but class was expected

2 个答案:

答案 0 :(得分:0)

当您的代码针对一个版本的Hadoop编译并且针对不同版本运行时,几乎总是会导致IncomaptibleClassChangeError

请检查以确保您针对与您正在运行的版本相同的Hadoop版本编译代码。

答案 1 :(得分:0)

如果您使用的是Maven,则需要在POM文件中进行更改。

之前我使用了以下依赖项:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-core</artifactId>
    <version>1.2.1</version>
</dependency>

当我将其更改为:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.5.2</version>
</dependency>

我认为这可能会有所帮助。据我所知,原因是Hadoop的后期版本将Counter视为接口而不是类。所以我们无法创建Counter的对象。