!!!!注意:本篇帖子并不适合初始化未初始化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'
大体应该是访问被拒绝。
根据这篇博主的文章,我找到了问题:
估计是访问某个操作不小心让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
问题解决
为避免误人子弟,如有erro极度欢迎指正!!!