圖片來源:自制
昨天犯了一個低級的錯誤,害我浪費了一整天的時間在檢查到底是Maven出錯,還是Mac 的Eclipse 有問題,還是我架設的artifactory沒設定好,結果最後發現的原因讓我吐血.....因此特別記錄起來提醒自己,希望大家不要跟我一樣犯同樣的錯誤...Orz...
昨天發生的問題就是我在Maven設定Hadoop相關Lib的版本(Hive,Hbase....等),以為大家的groupId應該都是一樣的,設定好後發現Eclipse 一直再噴Warning說缺檔案,但是最神奇的是去local Repository看,該有的檔案都存在,只是很明顯都是錯誤的jar檔(每個檔案都只有幾KB),所以我就開始懷疑是不是公司網路有檔?還是我Artifactory有設錯?甚至我都懷疑到Mac 的 Juno是不是還有Bug....混戰了一整天之後才發現原來是Hadoop某個版本之後groupId大搬風,所以我的設定根本是錯誤的....WTF....
首先是Hive的版本
0.8.0 之前的版本設定如下:
<dependency>
<groupid>org.apache.hadoop.hive</groupid>
<artifactid>hive-common</artifactid>
<version>${hive.version}</version>
</dependency>
而0.8.0之後的版本設定如下:
<dependency>
<groupid>org.apache.hive</groupid>
<artifactid>hive-common</artifactid>
<version>${hive.version}</version>
</dependency>
沒錯就是他搬家了~~~> <
再來是Zookeeper,這純粹是腦殘,我原本以為設定如下:
<dependency>
<groupid>org.apache.zookeeper</groupid>
<artifactid>zookeeper</artifactid>
<version>${zookeeper.version}</version>
<exclusions>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
</dependency>
但是實際上應該是這樣:
<dependency>
<groupid>org.apache.hadoop</groupid>
<artifactid>zookeeper</artifactid>
<version>${zookeeper.version}</version>
<exclusions>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
</dependency>
另外要注意的,就是Hbase cdh3 之前的版本會depend on thrift 0.2.0 但是在目前外面的public repository上是找不到的,所以我目前的解法就是把它exclude掉,然後另外include 0.5.0以後的thrift
<dependency>
<groupid>org.apache.hbase</groupid>
<artifactid>hbase</artifactid>
<version>${hbase.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.thrift</groupId>
<artifactId>thrift</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupid>org.apache.thrift</groupid>
<artifactid>libthrift</artifactid>
<version>0.5.0-cdh</version>
</dependency>
結論:
使用前請先參考Cloudrea 的Repositoty
https://repository.cloudera.com/artifactory/cloudera-repos
[1] Using the CDH3 Maven Repository
[2] Using the CDH4 Maven Repository
沒有留言 :
張貼留言