默认情况下,Hive的元数据是存储到Derby中的,这是Apache的一个纯Java编写的小巧数据库,类似于Sqlite。但是这样就会出现一个情况:Derby是单例的,当你在一个终端打开了hive时,在另外一个终端打开hive命令行会报错。所以使用MySQL来存储元数据能够解决这个问题,并且也更方便迁移和备份。
rpm -ivh mysql-server.rpm
yum -y install mysql-community-server
sudo grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
,输入初始密码后,登录成功ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]';
其中[email protected]为你想设置的密码。更详细的安装手册可以通过 https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 查阅
安装Mysql服务器之后,你需要配置允许root用户的登录权限
mysql -uroot -p
use mysql
select User, Host from user;
update user set host='%' where user='root';
flush privileges;
通过上述操作,就解决了用户登录可能遇到的权限问题。
/opt/apache-hive-1.2.2-bin/lib
下第一步,在Hive的conf目录中新建文件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://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
命令进行初始化。