gpt4 book ai didi

hadoop - 调用getSplit hadoop 2.0.0-cdh4.0.0时出现IncompatibleClassChangeError

转载 作者:行者123 更新时间:2023-12-02 20:07:44 27 4
gpt4 key购买 nike

我正在使用Cloudera-VM。 Hadoop版本:Hadoop 2.0.0-cdh4.0.0。

我已经编写了一个inputFileFormat,当客户端调用getSplits方法时,我得到一个异常:

IncompatibleClassChangeError found interface org.apache.hadoop.mapreduce.JobContext expecting

我正在使用mapreduce包中未映射的类。

但是,当我查看stacktrace时,我发现沿着该行的某个地方库变为mapred:
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
at com.hadoopApp.DataGeneratorFileInput.getSplits(DataGeneratorFileInput.java:27)
at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:1063)
at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1080)
at org.apache.hadoop.mapred.JobClient.access$600(JobClient.java:174)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:992)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:945)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:945)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:566)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:596)
at com.hadoopApp.HBaseApp.generateData(HBaseApp.java:54)
at com.hadoopApp.HBaseApp.run(HBaseApp.java:24)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
at com.hadoopApp.HBaseApp.main(HBaseApp.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:208)

不知道这是否有帮助,但是我在我的maven pom中使用了它:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>

解决了不确定的原因
将我的pom更改为此并开始工作-尽管不确定为什么它可以解决-您的输入对此表示赞赏:
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.0.0-cdh4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.0.0-cdh4.2.0</version>
</dependency>

如何解决这个问题?

最佳答案

在cdh4.2.0上使用Hipi时遇到了同样的问题。

该问题是由Hadoop版本之间的不兼容性引起的(使用Hadoop 1构建的作业可能无法在Hadoop 2上运行)。最初,您是使用Hadoop v1构建作业的,并在Hadoop 2.0.0环境上运行它(cloudera使用Hadoop 2.0.0)。

幸运的是,Hadoop 2.x完全支持hadoop 1.x API,因此,使用更新版本的hadoop重建工作将有所帮助。

关于hadoop - 调用getSplit hadoop 2.0.0-cdh4.0.0时出现IncompatibleClassChangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com