我試圖從CDH3升級到CDH4,並從編譯運行時得到版本衝突。 我得到這個錯誤: 異常線程「main」 java.lang.IncompatibleClassChangeError:找到接口org.apache.hadoop.mapreduce.Counter,但類預計CDH4:版本衝突:找到接口org.apache.hadoop.mapreduce.Counter,但期望的類
從谷歌上搜索,似乎我的代碼正在針對Hadoop 1.x進行編譯,並且正在Hadoop 2.0上運行。 我在同一個Hadoop客戶端上編譯和運行應用程序,所以它應該都是Hadoop 2.0。 以下是我在客戶端或此測試羣集中的任何其他節點上運行「hadoop版本」所得到的結果: Hadoop 2.0.0-cdh4.4.0 Subversion file:/// 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在9月3日星期二19:33編譯: 17 PDT 2013 從源與校驗ac7e170aa709b3ace13dc5f775487180 該命令使用/usr/lib/hadoop/hadoop-common-2.0.0-cdh4.4.0.jar
下面是從我POM相關的依賴性和回購協議運行。 xml:
<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的回購存在(我不希望和好像我的問題): .m2目錄/庫/組織/阿帕奇/ Hadoop的/ Hadoop的核心/ 0.20.2-cdh3u0
但我搜索應用程序的Maven依賴:樹和Hadoop的核心唯一的參考是: org.apache.hadoop:Hadoop的核心中:jar:2.0.0-MR1-CDH4 .4.0:編譯 僅供參考 - 我也嘗試排除MRunit依賴和所有我的測試代碼,但結果相同。
任何人都可以告訴我如何讓我的版本從編譯過渡到運行時(爲什麼在構建應用程序時hadoop-core/0.20.2-cdh3u0被拉下來了)? 我相信因爲我已經安裝了hadoop MRv1,它應該是編譯和運行時的Hadoop 2.0代碼......但是我仍然對MRv1中的版本化感到困惑。
嘿@alexP_Keaton:請您詳細說明一下嗎?我遇到了同樣的錯誤,而且在Maven方面我是新手。 – abhinavkulkarni
@abhinavkulkarni,maven多個版本的相同包中的依賴關係樹功能。但是當我添加詳細選項(-Dverbose)時,它顯示了其他版本,並且我能夠看到我的哪些依賴對0.20.2-cdh3u0具有傳遞依賴性。然後,我排除這種依賴Hadoop的在我的POM這樣的: org.apache.hadoop Hadoop的核心 –