我想運行一個map/reduce作業,我得到一個java.lang.NoSuchMethodError。我在這方面做了一些研究,當我的代碼執行(未編譯)時出現這種情況。在編譯過程中,類和方法的正確版本存在,但在嘗試運行時,正確的方法不可用。導致此問題的jar文件是番石榴。我從印刷的堆棧知道這一點。類路徑問題
ArrayDeque<Entry<String, String>> a = Queues.newArrayDeque();
這罐子是Hadoop的類路徑的一部分,因爲它配備了CDH VERSON 5.3.0,我使用:嘗試執行下面的代碼行,當我拋出一個錯誤。我曾嘗試將類番石榴的正確版本添加到類路徑中,但錯誤不會更改。我的問題如下:
我相信我已經正確地確定了這個問題。這對你來說似乎合理嗎?我從來沒有遇到過這個錯誤。
我相信我需要從類路徑中刪除舊版本的番石榴並添加新的。但是,我真的不知道從哪裏開始糾正這個問題。發給hadoop jar的命令不包含舊版本的guava(在-libjar parm中)。當我發出命令「hadoop classpath」時,jar是hadoop classpath的一部分。所以我假設有一些我可以編輯的hadoop配置文件讓它消失。這是正確的路要走,還是有其他我需要做的事情?
我使用的Java 7,CDH 5.3.0,NetBeans的8
TIA
我的頭頂 - 你可以把新的jar放在classpath的開頭嗎? –
據我所知,我可以通過在調用Hadoop時使用-libjar parm添加jar來將jar添加到classpath中。我使用它添加了jar,並在最後添加了它。 – Crackerman
在這種情況下,你可以嘗試這樣的:'export HADOOP_CLASSPATH =/path/to/newjar.jar:$ HADOOP_CLASSPATH;' –