hive2.3.2+mysql5.7.21驱动包_2018-08-30期 Hive外部元数据库配置

一、说明

Hive默认情况下使用derby作为元数据库,derby元数据库只允许单连接,如果两个会话在相同目录去连接hive,会导致第二个连上的用户做相同操作报错,如下图:

A用户连接到hive,并创建一个表,创建完成后只需show tables操作

[root@hadoop-server01 hive-0.12.0-bin]# bin/hive

hive> create table t_user(id int,name string) row format delimited fields terminated by ',';

hive> show tables;

OK

t_user

可以看出该会话正常输出用户表t_user

B用户在相同目录连接到hive,并执行show tables操作

[root@hadoop-server01 hive-0.12.0-bin]# bin/hive

hive> show tables;

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException:Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

报错,不能实例化HiveMetaStoreClient客户端

C用户在另外的目录连接hive,并只需show tables操作

[root@hadoop-server01 tmp]# pwd

/tmp

[root@hadoop-server01 tmp]# /usr/local/apps/hive-0.12.0-bin/bin/hive

hive> show tables;

OK

Time taken: 3.371 seconds

可以看出,C用户可以正常连接hive并只需show tables操作,但是C用户执行结果和A用户完全不一样,看到的信息完全不一样

原因在于如果使用hive自带的derby元数据库,则每个用户连接hive时都会在当前目录维护一个metastore_db,每个hive连接客户端都会将自己产生的信息存放到自己目录下的metastore_db,这就导致了不同客户端连接看到的信息不一致。这种情况下需要使用外部数据库作为其元数据库可以解决此问题

[root@hadoop-server01 tmp]# ll

drwxr-xr-x. 2 root   root   4096 Jul  8 23:45 hsperfdata_root

drwxr-xr-x. 5 root   root   4096 Jul  8 23:44 metastore_db

drwx------. 2 gdm    gdm    4096 Jul  8 18:22 orbit-gdm

[root@hadoop-server01 tmp]#

二、Hive外部元数据库配置

这里使用mysql数据库作为hive的外部元数据库,因此在进行hive元数据库连接配置前需要安装mysql数据库

1、安装mysql

安装介质:

[root@hadoop-server03 mysql]# ll

total 910036

-rw-r--r--. 1 root root 461608960 Sep  8  2016 mysql-5.7.15-1.el6.x86_64.rpm-bundle.tar

-rw-r--r--. 1 root root  23848332 Aug 25  2016 mysql-community-client-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root    335156 Aug 25  2016 mysql-community-common-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root   3738016 Aug 25  2016 mysql-community-devel-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root  39068680 Aug 25  2016 mysql-community-embedded-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root 134926080 Aug 25  2016 mysql-community-embedded-devel-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root   2174796 Aug 25  2016 mysql-community-libs-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root   1722992 Aug 25  2016 mysql-community-libs-compat-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root 150695776 Aug 25  2016 mysql-community-server-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root 105088968 Aug 25  2016 mysql-community-test-5.7.15-1.el6.x86_64.rpm

-rw-r--r--. 1 root root   8652406 Nov  1  2016 mysql-connector-java-5.0.8.tar.gz

开始安装:

[root@hadoop-server03 mysql]# rpm -ivh *.rpm --force --nodeps

Preparing...                ########################################### [100%]

1:mysql-community-common ########################################### [ 11%]

2:mysql-community-libs   ########################################### [ 22%]

3:mysql-community-client ########################################### [ 33%]

4:mysql-community-server ########################################### [ 44%]

5:mysql-community-devel  ########################################### [ 56%]

6:mysql-community-embedde########################################### [ 67%]

7:mysql-community-embedde########################################### [ 78%]

8:mysql-community-test   ########################################### [ 89%]

9:mysql-community-libs-co########################################### [100%]

备注:我这里由于已经安装了所有的依赖包,所以使用了--force --nodeps选项,不推荐使用这一的方法安装,建议在安装前把所有的依赖包都安装全了之后再执行mysql的安装。

启动mysql数据库

[root@hadoop-server03 mysql]# service mysqld start

Initializing MySQL database:                               [  OK  ]

Installing validate password plugin:                       [  OK  ]

Starting mysqld:                                           [  OK  ]

为此mysql安装完成,这里我们创建一个hive账号来管理hive的元数据

mysql> create database hive;

GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' IDENTIFIED BY 'hive#2018' WITH GRANT OPTION;

FLUSH PRIVILEGES;

为此存放hive元数据的数据库hive也创建完成,且允许远程连接。

2、修改hive配置文件

要使hive连接外部元数据库,只需要修改hive-site.xml即可

[root@hadoop-server01 conf]# cd /usr/local/apps/hive-0.12.0-bin/conf/

[root@hadoop-server01 conf]# vi hive-site.xml

javax.jdo.option.ConnectionURL

jdbc:mysql://hadoop-server03:3306/hive?createDatabaseIfNotExist=true

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

javax.jdo.option.ConnectionUserName

hive

javax.jdo.option.ConnectionPassword

hive#2018

只需要修改标红部分即可,也就是连接mysql数据库的信息

3、上传mysql jdbc连接驱动包

这里使用mysql-connector-java-5.0.8.tar.gz

将mysql-connector-java-5.0.8.tar.gz上传到hive的lib目录,上传后如下:

[root@hadoop-server01 lib]# ll mysql-connector-java-5.0.8-bin.jar

-rw-r--r--. 1 root root 540852 Nov 21  2016 mysql-connector-java-5.0.8-bin.jar

[root@hadoop-server01 lib]#

4、测试验证

在任意位置执行hive命令连接hive

A用户执行

hive> show tables;

OK

Time taken: 3.545 seconds

hive>

创建一个表

hive> create table t_test (id int,name string) row format delimited fields terminated by ',';

OK

Time taken: 0.225 seconds

hive>

hive> show tables;

OK

t_test

B用户在相同目录连接hive

hive> show tables;

OK

t_test

Time taken: 1.821 seconds, Fetched: 1 row(s)

B用户获取的内容同A用户相同

C用户在不同目录连接hive

hive> show tables;

OK

t_test

C用户在不同目录看到的信息同AB用户完全一致

因此使用外部的关系型数据库作为hive元数据后,可以解决hive使用默认的derby数据库存在问题,且保障了元数据存放的一致性。

查看hive数据库中存放的元数据记录,通过查询得知hive的元数据建表信息主要存放在TBLS表中,如下图:

mysql> desc TBLS

-> ;

+--------------------+--------------+------+-----+---------+-------+

| Field              | Type         | Null | Key | Default | Extra |

+--------------------+--------------+------+-----+---------+-------+

| TBL_ID             | bigint(20)   | NO   | PRI | NULL    |       |

| CREATE_TIME        | int(11)      | NO   |     | NULL    |       |

| DB_ID              | bigint(20)   | YES  | MUL | NULL    |       |

| LAST_ACCESS_TIME   | int(11)      | NO   |     | NULL    |       |

| OWNER              | varchar(767) | YES  |     | NULL    |       |

| RETENTION          | int(11)      | NO   |     | NULL    |       |

| SD_ID              | bigint(20)   | YES  | MUL | NULL    |       |

| TBL_NAME           | varchar(128) | YES  | MUL | NULL    |       |

| TBL_TYPE           | varchar(128) | YES  |     | NULL    |       |

| VIEW_EXPANDED_TEXT | mediumtext   | YES  |     | NULL    |       |

| VIEW_ORIGINAL_TEXT | mediumtext   | YES  |     | NULL    |       |

+--------------------+--------------+------+-----+---------+-------+

11 rows in set (0.00 sec)

mysql>select TBL_ID,TBL_NAME,TBL_TYPE from TBLS;

+--------+----------+---------------+

| TBL_ID | TBL_NAME | TBL_TYPE      |

+--------+----------+---------------+

|      1 | t_test   | MANAGED_TABLE |

+--------+----------+---------------+

1 row in set (0.00 sec)

如果要删除hive在mysql中定义的表,可以通过mysql语句去删除,通过hive删除会报错。

hive> show tables;

OK

t_t

t_t1

t_t5

现在通过mysql删除t_t5表

mysql> delete from tbls where tbl_id = 3;

Query OK, 1 row affected (0.11 sec)

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

hive> show tables;

OK

t_t

t_t1

现在t_t5表已经被删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值