解决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,即可解决该问题。

你可能感兴趣的:(大数据,hadoop)