今天在利用mapreduce對HBase進行輸入輸出的時候,發生了一件很無厘頭的事情,我和同事寫同樣的代碼,但是我成功了,而他卻失敗了,這就有點讓人頭疼。一開始我們以爲是配置的問題,但是經過比對,配置並沒有什麼不同。因此,我就將mapreduce的執行過程看了一遍,結果發現,他的org.apache.hadoop.conf.Configuration 類和我的org.apache.hadoop.conf.Configuration類是不同的,發現這個問題之後,就好辦了許多。這就是jar包的版本問題所導致的,那麼我們兩的依賴導入版本沒有什麼不同,爲什麼會發生jar包不同的事情呢?
這就涉及到maven項目加載依賴的機制,根據“artifactId”標籤中的內容開始加載,如果依賴中已經存在了相同的jar包,那麼即使版本不同也不會再次加載,所以pom.xml中依賴的添加順序也是十分重要的。我跟同事的依賴都一樣,但是我導入的hadoop依賴在前,hbase的依賴在後,因此我的hadoop-common版本是按照hadoop的版本加載的2.6.4的版本,而他的hadoop-common的版本卻是根據hbase的版本所加載的2.5.1的版本,這就導致我們相同的代碼產生了不同的結果。
我們只是一個小小的測試,如果是對於大的項目,那麼這就必須引起注意,要不然總是會發生一些無厘頭的異常,影響項目的進度。