最近,我在学习hive的时候,用MySQL作为hive的元数据库,配置好hive-site.xml文件后初始化hive的元数据库失败,显示错误为:
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
Underlying cause: java.sql.SQLNonTransientConnectionException : Public Key Retrieval is not allowed
错误表明在使用JDBC连接数据库时,遇到了安全限制,无法从远程服务器获取公钥来进行加密通信。
以下是我的hive-site.xml内容配置:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3307/metastore?useSSL=false</value>
</property>
<!--数据库驱动 如果你使用的是8.x 驱动是:com.mysql.cj.jdbc.Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<!--数据库的用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--数据库的密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>111111</value>
</property>
<!--hive默认在HDFS中的工作目录-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
我在检查完以下可能导致出现错误的原因后:
1、防火墙是否关闭
2、是否在hive-site.xml配置中关闭了SSL
3、hive-site.xml其它代码是否配置有误
仍然没有解决问题!
最后我更换了三次JDBC的驱动jar包版本,终于解决了问题!
我的 MySQL版本为8.0.26,第一次的驱动版本与之相同,后来换了多个版本直到8.3.0才解决问题,所以大家一定要选择与MySQL版本相适应的驱动版本,若第一次更换驱动版本没有解决,可以试着多更换几个版本。
好了,分享就写到这,希望大家遇到问题切记不要慌,多多实践(不要怕麻烦,也许解决的方法就在下一次时间中),祝大家以后的学习之路一帆风顺!