默认情况下,Hive的元数据是存储到Derby中的,这是Apache的一个纯Java编写的小巧数据库,类似于Sqlite。但是这样就会出现一个情况:Derby是单例的,当你在一个终端打开了hive时,在另外一个终端打开hive命令行会报错。所以使用MySQL来存储元数据能够解决这个问题,并且也更方便迁移和备份。
MySQL的安装与配置
1. 安装 Mysql-Community-Server
- 下载Mysql的RPM包:https://dev.mysql.com/downloads/repo/yum/ ,上传到机器中,假设文件名为mysql-server.rpm
- 以root权限下执行
rpm -ivh mysql-server.rpm
- 安装mysql服务器
yum -y install mysql-community-server
- 待安装完成后,找到初始密码
sudo grep 'temporary password' /var/log/mysqld.log
- 打开mysql客户端
mysql -uroot -p
,输入初始密码后,登录成功 - 修改初始密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]';
其中[email protected]为你想设置的密码。
更详细的安装手册可以通过 https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 查阅
2. 配置Mysql服务端
安装Mysql服务器之后,你需要配置允许root用户的登录权限
- 打开MySQL客户端
mysql -uroot -p
- 使用Mysql数据库
use mysql
- 查询user表
select User, Host from user;
- 修改uesr表,将Host字段修改为 % ,即允许任何主机登录
update user set host='%' where user='root';
- 更新Mysql的权限信息
flush privileges;
通过上述操作,就解决了用户登录可能遇到的权限问题。
3. 导入Mysql-Connector
- 在Mysql的官方下载界面:https://dev.mysql.com/downloads/connector/j/ 下载Mysql-Connector
- 解压后获得mysql-connector-java-8.0.21.jar,将jar包移动至
/opt/apache-hive-1.2.2-bin/lib
下
配置Hive中MySQL的连接
第一步,在Hive的conf目录中新建文件hive-site.xml
第二步,配置如下信息
代码语言:javascript复制<?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://localhost:3306/hive_metastore?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true</value>
</property>
<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>[email protected]</value>
</property>
</configuration>
最后,使用 schematool
工具的初始化命令进行初始化
需要注意的是:在配置过程中,可能会出现一些问题,这里记录一下我所遇到的问题及解决方案:
1、在配置完成后执行 drop table table_name
的删除表操作命令Cli无响应:
这是由于指定存储 Hive的metastore 的MySQL数据库的字符集格式问题。如上图,字符集格式为utf8mb4,这样就可能会导致出现drop table的问题。解决方案是删除数据库,重新新建数据库并指定字符集为lantin1,排序规则为latin1_bin 即可。
2、配置MySQL后,第一次打开hive的时候Cli无响应:
这个问题查阅了很多资料并没有找到更加详细的信息,但是经过DEBUG初步判断还是MySQL数据库的问题,导致Hive第一次启动时无法正常完成Metastore的数据表的初始化,按照上述第三步,在启动Hive前初始化下数据表即可:使用 schematool -dbType mysql -initSchema
命令进行初始化。