2015-04-30 45 views
0

有没有人有任何想法为什么以前的工作突然开始给这个错误之前工作?请帮忙Hadoop NoSuchMethodError

java.lang.NoSuchMethodError: org.apache.hadoop.mapred.Counters.findCounter(Ljava/lang/Enum;)Lorg/apache/hadoop/mapreduce/Counter; 
at edu.umn.cs.spatialHadoop.operations.Sampler.sampleMapReduceWithRatio(Sampler.java:214) 
at edu.umn.cs.spatialHadoop.operations.Sampler.sample(Sampler.java:543) 
at edu.umn.cs.spatialHadoop.operations.Repartition.packInRectangles(Repartition.java:494) 
at edu.umn.cs.spatialHadoop.operations.Repartition.packInRectangles(Repartition.java:463) 
at edu.umn.cs.spatialHadoop.operations.Repartition.repartitionLocal(Repartition.java:590) 

这一直工作得更早,但突然开始给这个错误。我使用Hadoop版本1.2.1

+0

你可能已经更新/降级了一些东西,以至于现在缺少一种方法。 – Distjubo

+0

什么一直在工作?显示导致错误的代码。 – Stibu

+0

@Stibu不需要代码片段,查看错误,一切都可能导致它。 – Distjubo

回答

0

org/apache/hadoop/mapreduce/Counter我猜测,hadoop-mapreduce-client-core.jar缺少

0

Counter类包括在hadoop-mapreduce-client-core.jar。你必须以某种方式降级它。

如果您使用的是构建工具(Maven的,gradle这个...),检查你的依赖,并确保他们没有改变。如有疑问,请使用最新版本。

否则,去你hadoop-mapreduce-client-core.jar,要么检查方法是内部或者只是得到一个较新的版本来替换它在你的项目中。

0

这是因为在应用程序中可用的最新编译类和相关jar有不同的版本。例如:让A类编译时使用了依赖jar X,然后在相同的A类中编译了不同的环境,其中依赖的jar包含了新的Y方法。现在该类将被编译,因为当jar中有相同的Class A用于jar X的环境中时,新的方法Y在jar X1中可用,那么当尝试在类内存中加载类时会导致NoSuchMethod异常。 Classloader在调用实际执行前在类内存中加载类之前执行相关类的验证。

0

一切都可用所有的jar文件和所有。经过一番辛苦的工作,想着什么是错误的,我决定重新载入一切(即重新载入hadoop文件)。感谢你们帮助:)