在啓動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,即可解決該問題。