最近的一個maven工程中,需要連接hbase。由於服務器端的運行環境是hbase 1.2.5和hadoop 2.7.3,所以想當然地在pom.xml里加入相同版本的jar依賴:
<project ...>
...
<dependencies>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.3</version>
</dependency>
...
</dependencies>
</project>
然而,運行時卻報錯:
org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
百度和谷歌的結果都說是因為guava包沖突,從pom的依賴層次看也確實如此。但按搜索結果嘗試多種解決方案,問題依舊。
后來參考其它工程,將hbase-client的版本改為1.3.0,居然就錯誤消失、一路暢通地過了!
知其然而不知其所以然,我也不清楚具體原因為何,煩請明白人告訴原因,謝謝!
