当我启动一个猪脚本时,我遇到一个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
答案 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的对象。