CDH4-异常:java.lang.CompatibleClassChangeError:

CDH4-异常:java.lang.CompatibleClassChangeError:,java,apache-pig,cloudera,Java,Apache Pig,Cloudera,当我启动pig脚本时,我遇到了一个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.LocalJobRun

当我启动pig脚本时,我遇到了一个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

当您的代码针对一个版本的Hadoop编译并针对另一个版本运行时,几乎总是会出现
IncomaptibleClassChangeError


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

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

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

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

org.apache.hadoop
hadoop内核
1.2.1
当我把它改成:

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

org.apache.hadoop
hadoop客户端
2.5.2
我想这可能会有帮助。根据我的说法,原因是Hadoop的更高版本将计数器视为接口而不是类。所以我们不能创建计数器的对象