Hive中metastore(元数据存储)三种方式区别和搭建

发布 : 2016-02-12 分类 : 大数据 浏览 :
1
2
3
4
5
6
7
Hive中metastore(元数据存储)的三种方式:

a)内嵌Derby方式

b)Local方式

c)Remote方式

1.内嵌Derby方式搭建

1.1.上传hive安装压缩文件到Linux主机的指定目录

1.2.解压hive压缩文件,到指定目录

1
[root@node1 software]# tar -zxf apache-hive-1.2.1-bin.tar.gz -C /opt/modules

1.3.修改/opt/modules/hadoop-2.5.1/share/hadoop/yarn/lib/目录下的jline-0.9.94.jar

查找文件

1
2
[root@node1 hadoop-2.5.1]# find ./ -name "jline*.jar"
./share/hadoop/yarn/lib/jline-0.9.94.jar
1
2
[root@node1 lib]# mv /opt/modules/hive-1.2.1/lib/jline-2.12.jar /opt/modules/hadoop-2.5.1/share/hadoop/yarn/lib/
[root@node1 ~]# cd /opt/modules/hadoop-2.5.1/share/hadoop/yarn/lib/

删除jline-0.9.94.jar包

1
[root@node1 lib]# rm -rf jline-0.9.94.jar

1.4.修改/opt/modules/hive-1.2.1/conf目录下的hive-env.sh.template为hive-env.sh,添加HADOOP_HOME环境变量

1
2
3
4
5
[root@node1 conf]# cp hive-env.sh.template hive-env.sh

HADOOP_HOME=/opt/modules/hadoop-2.5.1

[root@node1 conf]# vi hive-env.sh

1.5.修改/opt/modules/hive-1.2.1/conf目录下的hive-default.xml.template为hive-site.xml,增加配置

1
[root@node1 conf]# mv hive-default.xml.template hive-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<property>  
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>

<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>

<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>

1.6.配置hive环境变量

1
2
3
4
[root@node1 ~]# vi ~/.bash_profile

export HIVE_HOME=/opt/modules/hive-1.2.1
export PATH=$PATH:$HIVE_HOME/bin

1
[root@node1 ~]# source ~/.bash_profile

1.7.启动hive

1
[root@node1 hive-1.2.1]# hive

1.8.derby模式出现的问题

1
2
3
4
5
6
7
8
9
10
发现内置默认的metastore存在问题(1.换执行路径后,原来的表不存在了。2.只能有一个用户访问同一个表)

如:
[root@node1 ~]# cd /opt/modules/hive-1.2.1/
[root@node1 ~]# ./bin/hive
hive> show tables;
OK
tclass
testclass
Time taken: 3.012 seconds, Fetched: 2 row(s)
1
2
3
4
5
6
7
8
9
10
11
[root@node1 ~]# cd /opt/modules/hive-1.2.1/bin
[root@node1 ~]# hive
hive> show tables;
OK
Time taken: 2.489 seconds

一般不是用这个derby作为我们的元数据库,采用mysql的居多,

因为derby数据库有个缺陷,就是只支持单连接,

当然如果采用多连接的话需要进行切换目录。

2.本地mysql模式搭建

1
2
3
这种存储方式需要在本地运行一个mysql服务器,并作如下配置

(下面两种使用mysql的方式,需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下)。

2.1.解压,修改HADOOP_HOME\lib目录下的jline-*.jar 变成HIVE_HOME\lib下的jline-2.12.jar。

查找文件

1
2
3
4
5
[root@node1 hadoop-2.5.1]# find ./ -name "jline*.jar"
./share/hadoop/yarn/lib/jline-0.9.94.jar

[root@node1 lib]# mv /opt/modules/hive-1.2.1/jline-2.12.jar /opt/modules/hadoop-2.5.1/share/hadoop/yarn/lib/
[root@node1 ~]# cd /opt/modules/hadoop-2.5.1/share/hadoop/yarn/lib/

删除jline-0.9.94.jar包

1
[root@node1 lib]# rm -rf jline-0.9.94.jar

2.2.修改/opt/modules/hive-1.2.1/conf目录下的hive-env.sh.template为hive-env.sh,添加HADOOP_HOME环境变量

1
HADOOP_HOME=/opt/modules/hadoop-2.5.1

2.3.修改/opt/modules/hive-1.2.1/conf目录下的hive-default.xml.template为hive-site.xml,增加配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<property>  
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse</value>
</property>

<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.230.10: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>root</value>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>

2.5.在mysql中创建hive数据库

1
mysql> create database hive;

启动hive

1
hive --service metastore

2.6.上传mysql-connector-java-5.1.10.jar到/opt/modules/hive-1.2.1/lib目录下

2.7.安装Mysql

进入目录

2.7.1:解压压缩文件

1
[root@hive-matrix software]# unzip  mysql-libs.zip

####2.5.2:进入目录查看要安装的rpm源码包

1
[root@hive-matrix software]# cd mysql-libs

2.5.3:安装Mysql服务端

1
[root@hive-matrix mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
1
出错:可能是系统中存在MySQL相关软件

2.5.4:查看系统是否安装过MySQL相关的软件

1
[root@hive-matrix mysql-libs]# rpm -qa|grep mysql

2.5.5:强制性卸载之前的MySQL相关软件

1
[root@hive-matrix mysql-libs]# rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64
1
2
查看是否还存在MySQL的相关软件
[root@hive-matrix mysql-libs]# rpm -qa|grep mysql

2.5.6:安装Mysql服务端

1
[root@hive-matrix mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm

2.5.7:查看MySQL的密码

1
2
3
4
5
6
7
8
[root@hive-matrix ~]# sudo more /root/.mysql_secret

MySQL密码:HLvZqFKvyrzneWf2

进入目录
[root@hive-matrix ~]# cd /opt/software/mysql-libs

查看目录下安装包

2.5.8:查看mysql状态

1
[root@hive-matrix mysql-libs]# service mysql status
1
2
ps -aux|grep mysql
kill -9 21460

2.5.9:启动mysql服务

1
2
[root@hive-matrix mysql-libs]# service mysql start
查看mysql状态

2.6.1:设置mysql随着系统启动

1
[root@hive-matrix mysql-libs]# chkconfig mysql on

2.6.2:安装MySQL客户端

1
[root@hive-matrix mysql-libs]# rpm -ivh  MySQL-client-5.6.24-1.el6.x86_64.rpm

2.6.3:连接mysql

1
[root@node1 mysql-libs]#  mysql -uroot -pmHtNV9L9L37VYO5M

2.6.4:更改mysql登录密码

1
SET PASSWORD = PASSWORD('123456');

2.6.5:退出mysql

1
exit

2.6.7:重新启动服务.同时重新登陆(使用设置的新密码)

1
[matrix@hive-matrix software]$ mysql -uroot -p123456
1
2
3
4
5
6
这个是远程连接,需要设置mysql能进行远程连接,
即使可以远程连接,你也需要告诉mysql那台需要进行连接也需要进行设置权限,
这个就是mysql基于安全的考虑
接下来我们登录mysql进行授权
mysql> use mysql;
mysql> select User,Host,Password from user;

1
2
3
4
5
6
7
8
mysql> UPDATE user SET Password=PASSWORD('123456') where USER='root';

创建用户
CREATE USER 'root'@'192.168.230.129' IDENTIFIED BY '123456';
CREATE USER 'root'@'192.168.230.14' IDENTIFIED BY '123456';
CREATE USER 'root'@'192.168.230.1' IDENTIFIED BY '123456';
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '123456';
CREATE USER 'root'@'hadoop-sparse.cloudyhadoop.com' IDENTIFIED BY '123456';

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
这个是远程连接,需要设置mysql能进行远程连接,

即使可以远程连接,你也需要告诉mysql那台需要进行连接也需要进行设置权限,

这个就是mysql基于安全的考虑

接下来我们登录mysql进行授权

mysql> Grant all privileges on *.* to root@'%' identified by '123456';

mysql> Grant all privileges on *.* to root@'192.168.230.129' identified by '123456';

mysql> Grant all privileges on *.* to root@'192.168.230.14' identified by '123456';

mysql> Grant all privileges on *.* to root@'192.168.230.1' identified by '123456';

mysql> Grant all privileges on *.* to root@'127.0.0.1' identified by '123456';
Grant all privileges on *.* to root@'hadoop-sparse.cloudyhadoop.com' identified by '123456';

1
mysql> flush privileges;

1
2
3
4
5
mysql> select * from mysql.user where user='root' and host='%'\G

权限报错是因为%登录的root没有grant option的权限

mysql> update mysql.user set Grant_priv='Y' where user='root' and host='%';

2.6.8授权好了,在进入/opt/modules/hive-1.2.1目录,启动hive

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
进入hive后,使用show tables命令查看,发现没有任何表

创建一张表

创建表的信息

hive> show create table emp;
OK
CREATE TABLE `emp`(
`empno` int,
`ename` string,
`job` string,
`mgr` int,
`hiredate` string,
`sal` double,
`comm` double,
`deptno` int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://matrix/usr/hive-1.2.1/warehouse/emp'
TBLPROPERTIES (
'COLUMN_STATS_ACCURATE'='true',
'numFiles'='1',
'numRows'='0',
'rawDataSize'='0',
'totalSize'='96',
'transient_lastDdlTime'='1457655930')
Time taken: 1.094 seconds, Fetched: 24 row(s)

2.6.9使用Navicat远程连接Linux主机上的Mysql数据库

2.7.进入mysql查看hive的元数据信息

1
mysql> use hive

1
2
mysql> create database hive;
mysql> show tables;

1
mysql> select * from TBLS;

2.8.在navicat中使用命令行查看mysql中的hive数据库

1
失败!用户对hive数据库操作的权限

2.9.在mysql中设置允许root用户拥有对hive数据库全部权限

1
2
mysql> GRANT all ON hive.* TO root@'%' IDENTIFIED BY '123456';
mysql> flush privileges;

1
GRANT all ON hive.* TO root@'master' IDENTIFIED BY '123456';
1
2
3
4
5
6
7
8
9
10
11
12
13
这个是由于我的mysql不再本地(默认使用本地数据库),这里需要配置远端元数据服务器
hive.metastore.uris

thrift://lza01:9083
Thrift URI for the remote metastore. Used by metastore client to connect to rem
ote metastore. 然后在hive服务端启动元数据存储服务 hive –service metastore

在Hive中创建表失败!

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)

报错原因:没有启动
[root@master hive-1.2.1]# hive –service metastore
本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2016/02/12/Hive中metastore(元数据存储)三种方式区别和搭建/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹