默认情况下,Hive的元数据信息存储在内置的Derby数据中。Hive支持将元数据存储在MySQL中,配置过程如下:
1.安装MySQL
创建用户hadoop
$ mysql -u root -p
Enter password:
进入MySQL后,
mysql> CREATE USER 'hadoop'@'localhost' IDENTIFIED BY 'hadoop';
Query OK, 0 rows affected (0.19 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'localhost' WITH GRANT OPTION
;
Query OK, 0 rows affected (0.03 sec)
mysql> exit;
Bye
2.修改配置文件hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://zhengzhuangjie.iteye.com/blog/configuration.xsl" target="_blank" rel="nofollow"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?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>hadoop</value><!-- In my case UserName is hadoop-->
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value><!-- In my case password is hadoop-->
</property>
</configuration>
3.下载MySQL JDBC Driver,将其拷贝至Hive安装目录lib文件夹下。
4.测试Hive
$ ./hive
hive> create table temp(info INT);
OK
Time taken: 6.413 seconds
hive> show tables;
OK
temp
Time taken: 0.262 seconds
hive> exit;
5.登录MySQL,查看Hive数据库中的元数据信息。
$ mysql -u hadoop -p
Enter password:
进入MySQL后,
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hive |
| mysql |
+--------------------+
3 rows in set (0.05 sec)
mysql> use hive
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------+
| Tables_in_hive |
+-----------------+
| BUCKETING_COLS |
| COLUMNS |
| DATABASE_PARAMS |
| DBS |
| PARTITION_KEYS |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SORT_COLS |
| TABLE_PARAMS |
| TBLS |
+-----------------+
13 rows in set (0.00 sec)
mysql> select * from COLUMNS;
+-------+---------+-------------+-----------+-------------+
| SD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |
+-------+---------+-------------+-----------+-------------+
| 1 | NULL | info | int | 0 |
+-------+---------+-------------+-----------+-------------+
1 row in set (0.00 sec)