配置好hivemetastore后使用show databases命令报错FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.Hi

!!!!注意:本篇帖子并不适合初始化未初始化hive的解决方案,在报这个错误之前,我已经配置好了hive的metastore为mysql并正常使用了一段时间。

我的hive版本为2.3.9, mysql为5.7

问题描述:

首先,我是前面已经使用配置了mysql为hive的metastore并正常使用了一段时间,但是因为业务需要,在使用spark.sql操作hive时,

我将jdbc的编码格式指定为了utf-8

并且对mysql的编码格式进行了修改,这导致了我无法再使用hive运行hql,我使用了最简单的show databases,报错:

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
hive> quit;

我试图按照网上的帖子

在$HIVE_HOME/bin下

再次初始化了元数据,并开启metastore服务,命令分别如下:

# 初始化元数据
 schematool -initSchema -dbType mysql -verbose
# 开启metastore命令
hive --service metastore & 

没有解决

但是在我开启metastore服务时,另一个窗口使用hive客户端执行hql会导致本窗口报异常

非常长也非常多,我这里列举最重要的一条异常信息:

jdbc4.MySQLSyntaxErrorException : Access denied for user 'root'@'hadoop112' to database 'metastore'

大体应该是访问被拒绝。

根据这篇博主的文章,我找到了问题:

(1条消息) hive启动metastore报错:MySQLSyntaxErrorException: Access denied for user ‘root‘@‘hadoop‘ to database ‘met_RayBreslin的博客-CSDN博客

估计是访问某个操作不小心让root用户没有了对存元数据的metastore目录的访问权限

赋予对应的权限,并刷新重启mysql服务,就可以了

具体命令:

# 里面的用户,主机名,和密码写你自己的
mysql>grant all privileges on *.* to '用户'@'主机名' identified by '密码' with grant option;

随后我们刷新一下:

mysql>flush privileges;

重启服务

sudo service mysqld restart

重新启动metastore服务

$HIVE_HOME/bin/hive --service -metastore & 

进入hive

配置好hivemetastore后使用show databases命令报错FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.Hi_第1张图片

 问题解决

为避免误人子弟,如有erro极度欢迎指正!!!

你可能感兴趣的:(hive,hive,big,data)