2015-09-23 66 views
2

我正試圖導入一個文件,其中包含引用的字段。我發現了csv-serde JAR,並試圖用它來取得最小的成功。配置單元添加JAR不工作

我從網上下載JAR: https://github.com/ogrodnek/csv-serde

我加入到我的HDFS系統的/ tmp目錄。

當我嘗試使用視圖從內部Ambari蜂巢我設置如下:

ADD JAR /tmp/csv-serde-1.1.2-0.11.0-all.jar; 

這將引發錯誤,該文件不存在:

H110無法提交聲明。錯誤在處理語句: /tmp/csv-serde-1.1.2-0.11.0-all.jar不存在[ERROR_STATUS]

我再從終端嘗試調用蜂巢:

配置單元>添加JAR /tmp/csv-serde-1.1.2-0.11.0-all.jar;

成功。然後創建我的EXTERNAL TABLE,然後選擇一些字段以確保它在CLI配置單元環境和所有作品中都很好。

我再從內Ambari回到蜂巢查看,當我在桌子上運行任何類型的操作,我得到:

H110無法提交聲明。錯誤在編譯時聲明: 失敗:RuntimeException的 MetaException(消息:拋出java.lang.ClassNotFoundException類 com.bizo.hive.serde.csv.CSVSerde未找到)[ERROR_STATUS]

當我嘗試這個查詢從MS SQL通過ODBC驅動器我也得到相同的錯誤。

我已經看過這個論壇上多個職位有關添加某某.jar和這個那個來:

/usr/lib目錄/蜂房

該目錄不退出上我的羣集在基本操作系統級別或在HDFS文件系統中。我應該在哪裏以及如何放置.jar文件,以便我可以查詢我的表以外的配置單元CLI?

回答

0

您需要將該jar放在HDFS的某個位置。許多人在HDFS中使用/ tmp,就像你在本地FS中一樣。例如:

hdfs dfs -put /tmp/csv-serde-1.1.2-0.11.0-all.jar /tmp 

然後,當你在蜂巢查看,你會

ADD JAR hdfs://$HOSTNAME:$PORTNUM/tmp/csv-serde-1.1.2-0.11.0-all.jar; 

這應該工作,並允許您查詢數據。

0

嘗試完整路徑,G:

ADD JAR hdfs://<host>/<port>/tmp/csv-serde-1.1.2-0.11.0-all.jar; 

如果由於某種原因,在播放從Ambari觀衆中的配置是不同的,而不是定義的默認FS,那麼這可能是工作。

您提到的另一個選項 - 我相信只要它位於運行配置單元服務器的同一主機上,並且hive-site.xml指向它,放入該jar的目錄就無關緊要。挑選蜂巢服務器計算機上的文件系統上的任何位置(例如,/家庭/ MYNAME /瓶)編輯蜂房的site.xml

<property> 
    <name>hive.aux.jars.path</name> 
    <value>/home/myname/jars</value> 
</property> 

和複製的CSV SERDE-1.1.2-0.11.0,所有.jar到/ home/myname/jars(在本地fs上,而不是在hdfs上)。重新啓動配置單元並嘗試。在這種方法中,您根本不需要使用ADD JAR - 該jar將自動包含在hive服務器類路徑中。

我讀過但從來沒有嘗試過的另一個選項是將jar放入配置單元lib目錄中。你也可以嘗試,但一定要先重新啓動配置單元。

關於ADD JAR的注意事項:ADD JAR命令和稍後使用它的查詢必須在同一個會話中執行。 Hive CLI中的命令在單個會話中,因此它可以工作。我不知道Ambari Hive視圖如何管理會話。