2013-10-09 62 views
0

我得到一个Java问题,当我推出一个猪脚本,这似乎是一些依赖或版本冲突,运行Debian/Cloudera的CDH4/Apache的猪CDH4 - 异常:java.lang.IncompatibleClassChangeError:

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 

回答

0

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

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

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的一个对象。

相关问题