在配置 Metastore 到 MySql时,遇到一个java.net.ConnectException的坑。
 
首先我们应该排除基本的hive配置是成功的,至少保证在单机模式(Metastore 默认存储在自带的 derby 数据库)输入hive能到达下面界面
 
 
其次,我们需要安装版本较低的数据库(尽可能5.7以下,这次测试是5.6版本)。然后需要在hive/conf/目录下添加一个hive-site.xml
配置如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>

<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://{mysql安装的ip}:3306/hive_remote?createDatabaseIfNotExist=true</value>

</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>11451287</value>
</property>

</configuration>

确保我们hdfs下的user/hive/warehouse以及tmp目录是创建了的,如果出现访问错误还需要改两个目录的权限。

 

 然后启动整个hadoop集群及zookeeper(由于博主的zookeeper与jdk有版本差异,所以没有zookeeper的进程)

 

 

最后启动hive,然后博主继续报错,爬坑了几天,不管是换jdbc的版本驱动,还是重装mysql,或者是重装hive,都是一直拒绝连接。然后脱坑了2天,灵感突发,发现用pc真机去连虚拟机的mysql,连接是失败的,尽管我的虚拟机关闭了防火墙。于是发现我们需要在mysql 下面去设置这样一条命令,我们的真机端才能进行访问

mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

 

这时候启动虚拟机上配好MySQL映射的hive (发现启动成功)

 

 

因此,总结就是:以前玩数据库都是在单机上面玩,用主机连主机上面安装的数据库一切正常,但是当我们在服务器上面玩的时候,不仅要注意防火强开关的问题,mysql数据库本身还需要我们授权从任意主机连接到MySQL服务器