Apache-Hive 使用MySQL存储Hive的元数据

2020-08-12 10:13:07 浏览数 (1)

默认情况下,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 命令进行初始化。

0 人点赞