2015-06-17 21 views
2

我有運行一個簡單的豬腳本中使用HBaseStorage如何在運行Apache Pig腳本時查找jar依賴關係?

我曾經遇到過的錯誤將數據導入到HBase的一些困難是由下式給出:

Caused by: <file demo.pig, line 14, column 0> pig script failed to validate: java.lang.RuntimeException: could not instantiate 'org.apache.pig.backend.hadoop.hbase.HBaseStorage' with arguments '[rdf:predicate rdf:object]'    

Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Scan.setCacheBlocks(Z)V   
     at org.apache.pig.backend.hadoop.hbase.HBaseStorage.initScan(HBaseStorage.java:427) 

     at org.apache.pig.backend.hadoop.hbase.HBaseStorage.<init>(HBaseStorage.java:368) 

     at org.apache.pig.backend.hadoop.hbase.HBaseStorage.<init>(HBaseStorage.java:239) 13_21.51.28.tar.gz 
     ... 29 more 

根據其他問題和線程,主要反應/回答這個問題的方法是註冊HBaseStorage參考所需的適當的罐子。我被難住的是我如何確定給出適當的豬功能所需的JAR。

我甚至試圖打開hbase和pig文件夾下的各種jar文件,以確保在豬腳本中註冊了相應的類。

例如,由於java.lang.NoSuchMethodError通過org.apache.hadoop.hbase.client.Scan.setCacheBlocks(Z)V

引起我特別導入包含org.apache.hadoop.hbase.client.Scan,無濟於事罐子。

豬的文檔沒有提供任何明顯的鏈接和幫助,我可以參考。

我使用的是Hadoop 2.7.0,HBase 1.0.1.1,Pig 0.15.0。

如果您需要任何其他澄清,請隨時再次問我。如果有人能幫我解決這個問題,我會非常感激。

另外,從頭開始安裝Hadoop和相關軟件會更好嗎,還是直接獲取其中一個Hadoop包可以更好?

+0

你解決了這個問題嗎?將hbase從0.98.3升級到1.0.1.1後遇到同樣的問題。 – Jacky

回答

0

你註冊了需要的罐子嗎?
最重要的罐子habse,動物園管理員和番石榴
我在我的pigscript註冊飼養員罐子解決類似問題的種類

3

也有一些是錯誤的發佈罐子:HBase的客戶端 - 1.0.1.1.jar

你可以用這個代碼測試,該錯誤會顯示:

Scan scan = new Scan(); 
scan.setCacheBlocks(true); 

我試過另一組功能,如setCaching,它會引發同樣的錯誤。當我檢查源代碼時,這些函數就存在了。也許只是手動編譯HBase的客戶端 - 1.0.1.1.jar,我仍然在尋找更好的解決辦法...

============

更新上面,發現根本原因是hbase-client-1.0.1.1.jar與舊版本不兼容。

https://issues.apache.org/jira/browse/HBASE-10841

https://issues.apache.org/jira/browse/HBASE-10460

沒有爲集函數返回值的變化,罐子舊版本編譯不會與當前的工作。

對於你的問題,你可以修改豬腳本$ PIG_HOME/bin/pig,設置debug = true,那麼它只會打印運行信息。