我正在尝试从CDH3升级到CDH4,并且从编译到运行时遇到版本冲突。 我收到这个错误: 线程“main”中的异常java.lang.IncompatibleClassChangeError:找到接口org.apache.hadoop.mapreduce.Counter,但是预期了类
从谷歌搜索看来,我的代码似乎是针对Hadoop 1.x编译的,并且正在Hadoop 2.0上运行。 我正在同一个Hadoop客户端上编译和运行应用程序,所以它应该都是Hadoop 2.0。 这是我在客户端或此测试集群中的任何其他节点上运行“hadoop version”时得到的结果: Hadoop 2.0.0-cdh4.4.0 Subversion文件:///data/1/jenkins/workspace/generic-package-rhel64-6-0/topdir/BUILD/hadoop-2.0.0-cdh4.4.0/src/hadoop-common-project/hadoop-common - r c0eba6cd38c984557e96a16ccd7356b7de835e79 由jenkins于2013年9月3日星期二19:33:17编辑 来源与校验和ac7e170aa709b3ace13dc5f775487180 此命令使用/usr/lib/hadoop/hadoop-common-2.0.0-cdh4.4.0.jar
运行以下是我的pom.xml中的相关依赖项和repos:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>2.0.0-mr1-cdh4.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.0.0-mr1-cdh4.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.mrunit</groupId>
<artifactId>mrunit</artifactId>
<version>0.9.0-incubating</version>
<classifier>hadoop1</classifier>
</dependency>
...
<repository>
<id>cloudera</id>
<name>cloudera</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
</repository>
在编译我的应用程序后,这个目录存在于我的maven repo中(我不希望这看起来像我的问题): 的的.m2 /库/组织/阿帕奇/ hadoop的/ Hadoop的芯/ 0.20.2-cdh3u0
但我搜索了应用程序maven依赖:树和hadoop-core的唯一引用是: 的 org.apache.hadoop:Hadoop的核心:罐:2.0.0-MR1-cdh4.4.0:编译 仅供参考 - 我也尝试排除了MRunit依赖项和我的所有测试代码,但结果相同。
任何人都可以建议我如何让我的版本从编译到运行时间(为什么在构建应用程序时,hadoop-core / 0.20.2-cdh3u0被拉下来)? 我相信因为我已经安装了hadoop MRv1,它应该是编译和运行时的Hadoop 2.0代码......但我仍然对MRv1中的版本控制感到困惑。
答案 0 :(得分:2)
想出来 - 它本身的 mvn依赖:tree 没有向我展示为cdh3调用的依赖,但 mvn依赖:tree -Dverbose 显示了冲突的依赖。 从那里我添加了一个排除到pom,现在工作运行。