2015-04-30 80 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文件)。感謝你們幫助:)