Hive有3中运行模式,今天主要来介绍一下把元数据保存在mysql中的配置方法.
(1)内嵌模式
将元数据保存在本地内嵌的 Derby 数据库中,这是使用 Hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。
(2)本地模式
这种模式是将元数据保存在本地独立的数据库中(一般是 MySQL),这用就可以支持多会话和多用户连接了。
(3)远程模式
此模式应用于 Hive 客户端较多的情况。把 MySQL 数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。
1.解压tar包(使用的是hive-2.2.0),并重命名;
[root@master hive]# tar -zxvf apache-hive-2.2.0-bin.tar.gz
[root@master hive]# mv apache-hive-2.2.0-bin hive-2.2.0
2.修改环境变量,vi /etc/profile
export HIVE_HOME=/home/jason/bigdata/hive/hive-2.2.0
export PATH=$PATH:$HIVE_HOME/bin
保存,退出后,别忘了,source /etc/profile使之生效.
3.修改hive的配置文件,hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.17.142:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>12345678</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateColumns</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive</value>
<description>location of default database for the warehouse</description>
</property>
</configuration>
4.初始化hive在mysql的元数据信息.
schematool -dbType mysql -initSchema
在使用的过程中会有两个报错,如5,6所示,报错信息和解决方法都贴了出来.
5.MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1
解决办法:
是mysql的版本和驱动的版本不匹配导致的,我的mysql版本是5.6的,刚开始使用的驱动是5.1.18,
,但是mysql5.6已经抛弃了这个参数,所以会报上面错误,换成驱动mysql-connector-java-5.1.31-bin.jar放到hive/lib/下面.
6.message:For direct MetaStore DB connections, we don't support retries at the client level.
这个报错是因为需要在mysql中设置hive的字符集.
alter database hive character set latin1;
7.启动hive. bin/hive
如果有写的不对的地方,欢迎大家指正,如果有什么疑问,可以加QQ群:340297350,谢谢