Hive中metastore(元数据存储)三种方式区别和搭建
Hive中metastore(元数据存储)的三种方式:
a)内嵌Derby方式
b)Local方式
c)Remote方式
1、内嵌Derby方式搭建
1.1、上传hive安装压缩文件到Linux主机的指定目录
1.2、解压hive压缩文件,到指定目录
[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
查找文件
[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包
[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环境变量
[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,增加配置
[root@node1 conf]# mv hive-default.xml.template hive-site.xml
<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>/opt/modules/hive-1.2.1/warehouse</value>
</property>
1.6、配置hive环境变量
[root@node1 ~]# vi ~/.bash_profile
export HIVE_HOME=/opt/modules/hive-1.2.1
export PATH=$PATH:$HIVE_HOME/bin
[root@node1 ~]# source ~/.bash_profile
1.7、启动hive
[root@node1 hive-1.2.1]# hive
1.8、derby模式出现的问题
发现内置默认的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)
[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模式搭建
这种存储方式需要在本地运行一个mysql服务器,并作如下配置
(下面两种使用mysql的方式,需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下)。
2.1、解压,修改HADOOP_HOME\lib目录下的jline-*.jar 变成HIVE_HOME\lib下的jline-2.12.jar。
查找文件
[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包
[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环境变量
HADOOP_HOME=/opt/modules/hadoop-2.5.1
2、3、修改/opt/modules/hive-1.2.1/conf目录下的hive-default.xml.template为hive-site.xml,增加配置
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive-1.2.1/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>
hive --service metastore
2.4、上传mysql-connector-java-5.1.10.jar到/opt/modules/hive-1.2.1/lib目录下
2.5、安装Mysql
进入目录
2.5.1:解压压缩文件
[root@hive-matrix software]# unzip mysql-libs.zip
2.5.2:进入目录查看要安装的rpm源码包
[root@hive-matrix software]# cd mysql-libs
2.5.3:安装Mysql服务端
[root@hive-matrix mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
出错:可能是系统中存在MySQL相关软件
2.5.4:查看系统是否安装过MySQL相关的软件
[root@hive-matrix mysql-libs]# rpm -qa|grep mysql
2.5.5:强制性卸载之前的MySQL相关软件
[root@hive-matrix mysql-libs]# rpm -e –nodeps mysql-libs-5.1.66-2.el6_3.x86_64
查看是否还存在MySQL的相关软件
[root@hive-matrix mysql-libs]# rpm -qa|grep mysql
2.5.6:安装Mysql服务端
[root@hive-matrix mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
2.5.7:查看MySQL的密码
[root@hive-matrix ~]# sudo more /root/.mysql_secret
MySQL密码:HLvZqFKvyrzneWf2
进入目录
[root@hive-matrix ~]# cd /opt/software/mysql-libs
查看目录下安装包
2.5.8:查看mysql状态
[root@hive-matrix mysql-libs]# service mysql status
ps -aux|grep mysql
kill -9 21460
2.5.9:启动mysql服务
[root@hive-matrix mysql-libs]# service mysql start
查看mysql状态
2.6.1:设置mysql随着系统启动
[root@hive-matrix mysql-libs]# chkconfig mysql on
2.6.2:安装MySQL客户端
[root@hive-matrix mysql-libs]# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm
2.6.3:连接mysql
[root@node1 mysql-libs]# mysql -uroot -pmHtNV9L9L37VYO5M
2.6.4:更改mysql登录密码
SET PASSWORD = PASSWORD(‘123456’);
2.6.5:退出mysql
exit
2.6.7:重新启动服务、同时重新登陆(使用设置的新密码)
[matrix@hive-matrix software]$ mysql -uroot -p123456
这个是远程连接,需要设置mysql能进行远程连接,
即使可以远程连接,你也需要告诉mysql那台需要进行连接也需要进行设置权限,
这个就是mysql基于安全的考虑
接下来我们登录mysql进行授权
mysql> use mysql;
mysql> select User,Host,Password from user;
mysql> UPDATE user SET Password=PASSWORD('123456') where USER='root';
创建用户
CREATE USER 'root'@'192.168.230.10' 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';
这个是远程连接,需要设置mysql能进行远程连接,
即使可以远程连接,你也需要告诉mysql那台需要进行连接也需要进行设置权限,
这个就是mysql基于安全的考虑
接下来我们登录mysql进行授权
mysql> Grant all privileges on *.* to root@'%' identified by '123456';
mysql> Grant all privileges on *.* to root@'192.168.230.10' 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';
mysql> flush privileges;
2.6.8授权好了,在进入/opt/modules/hive-1.2.1目录,启动hive
进入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的元数据信息
mysql> use hive
mysql> create database hive;
mysql> show tables;
mysql> select * from TBLS;
2.8、在navicat中使用命令行查看mysql中的hive数据库
失败!用户对hive数据库操作的权限
2.9、在mysql中设置允许root用户拥有对hive数据库全部权限
mysql> GRANT all ON hive.* TO root@'%' IDENTIFIED BY '123456';
mysql> flush privileges;