解決Hive: java.lang.ClassNotFoundException Class org.apache.hive.hcatalog.data.JsonSerDe not found

在啓動Hive時,創建一個表並對其添加一個JSON格式匹配

ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe':

問題出現原因如下圖的問題:

 出現該問題的原因主要在於Hive在初始啓動時並沒有成功加載用於解析JSON格式的JAR包,而出現的ClassNotFoundException中的類就是此表用到的JsonSerDe,故由此可以得到解決該問題的主要思路,如下有兩種解決方法:

1. 臨時解決

找到 hive-hcatalog-core-1.2.2.jar 包,該包的存儲目錄爲

$HIVE_HOME/hcatalog/share/hcatalog/hive-hcatalog-core-1.2.2.jar

由於筆者所用的Hive版本爲hive-1.2.2,只需將相應版本替換即可。然後將該目錄添加到Hive中,具體做法如下:

啓動Hive,然後在出現問題的表數據庫中添加JAR包(在default數據庫也可)

add jar $HIVE_HOME/hcatalog/share/hcatalog/hive-hcatalog-core-1.2.2.jar

之後即可進行JSON格式匹配。

2.永久解決(若是僅僅做實驗可忽略此方法)

然而1中的方法僅僅是臨時解決,在hive的下次啓動並不能持續生效,並且會發生對以創建的表無法j解析JSON格式的問題,所以需要從根本上解決該問題。

觀察Hive的日誌信息,可以看出拋出該問題是由org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore引起的,所以在

$HIVE_HOME/bin

目錄下導入hive-hcatalog-core-1.2.2.jar 包,可以執行

# cp $HIVE_HOME/hive-1.2.2/hcatalog/hive-hcatalog-core-1.2.2.jar $HIVE_HOME/hive-1.2.2/lib

之後在$HIVE_HOME/conf下,找到hive-env.sh修改HIVE_AUX_JARS_PATH內容,即添加如下使其在MR時生效

export HIVE_AUX_JARS_PATH=$HIVE_HOME/hcatalog/share/hcatalog/hive-hcatalog-core-1.2.2.jar

保存重啓Hive,即可解決該問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章