一、Hive简介
Hive是基于hadoop的数据仓库工具,Hive借助于hadoop的hdfs和mapreduce来实现数据存储和数据分析功能的。可以将结构化的数据文件映射为一个数据库表,并提供类sql查询功能,其本质是用户使用类sql语句,hive会转化为mr程序,从而完成数据的分析。所以Hive的用途被用来作为离线数据分析,比直接开发mr程序效率高。
Hive的历史
由FaceBook 实现并开源
2011年3月,0.7.0版本 发布,此版本为重大升级版本,增加了简单索引,HAING等众多高级特性
2011年06月,0.7.1 版本发布,修复了一些BUG,如在Windows上使用JDBC的的问题
2011年12月,0.8.0版本发布,此版本为重大升级版本,增加了insert into 、HA等众多高级特性
2012年2月5日,0.8.1版本发布,修复了一些BUG,如 使 Hive 可以同时运行在 Hadoop0.20.x 与 0.23.0
2012年4月30日,0.9.0版本发布,重大改进版本,增加了对Hadoop 1.0.0的支持、实现BETWEEN等特
性
…………………………………
2018年7月份,3.1版本发布
使用Hive的优点:
1、采用类sql语法,接近数据分析,提供快速开发的能力。
2、避免去写mr程序,减少开发人员的学习成本。
3、功能扩展很方便,可以使用函数及自定义函数。
4、容错性好,节点出现问题sql仍然可以执行完成
5、可以自由扩展集群的规模,一般情况下不需要重启服务器
Hive的发展未来
1、增加更多类似关系型数据的功能,比如存储过程
2、提高转化mr的效率
3、UI部分加强
4、具有真正数据仓库的能力
Hive查询分析流程
1、Hive可以把HDFS结构化的数据映射为一张数据库表,并且记录了映射关系元数据,比如表名–文件名,字段名–数据列
2、sql语法解析器根据映射元数据解析查询类sql语句
3、然后调用mr程序模板库的模板来组建相应的mr程序
4、最后由mr程序提交器提交给yarn集群
Hive组件:
用户接口:包括CLI,JDBC/ODBC,webGUI。CLI是command line interface是shell命令行;JDBC/ODBC是Hive的java实现,和传统的数据库JDBC类似;webGUI是用web浏览器访问Hive。
元数据存储:元数据存储在关系型数据库mysql或者自带的derby,元数据包括:表名,表的列和分区及属性,表的属性,表的数据所在目录等
解释器、编译器、优化器、执行器:完成hql语句词法分析,语法分析,编译,优化及查询计划的完成。生成的查询计划存储在HDFS中,随后有mr调用执行。
二、Hive架构
三、Hive安装部署
**Hive安装之前要先安装hadoop和jdk,根据元数据存储的介质不同,分为两个版本,其中derby属于内嵌模式,生产环境则使用mysql来进行元数据的存储。
内置derby: 解压hive安装包,bin/hive启动即可,但是使用不同的路径启动hive,每个路径下面hive都会产生一套自己的元数据,无法共享。
mysql:解压修改配置文件:vi conf/hive-site.xml,然后配置元数据库信息。**
1、 安装mysql(一)
1.上传文件至linux:
[root@ip158 ~]# ls
anaconda-ks.cfg MySQL-5.5.62-1.el7.x86_64.rpm-bundle.tar sw
hello_158.sh mysql-connector-java-5.1.47.jar zookeeper.out
2.解压: tar xvf MySQL-5.5.62-1.el7.x86_64.rpm-bundle.tar
MySQL-devel-5.5.62-1.el7.x86_64.rpm
MySQL-embedded-5.5.62-1.el7.x86_64.rpm
MySQL-shared-5.5.62-1.el7.x86_64.rpm
MySQL-test-5.5.62-1.el7.x86_64.rpm
MySQL-server-5.5.62-1.el7.x86_64.rpm
MySQL-shared-compat-5.5.62-1.el7.x86_64.rpm
MySQL-client-5.5.62-1.el7.x86_64.rpm
进入sw目录下,新建一个文件夹用来存放MYSQL解压文件
[root@ip158 ~]# cd sw
[root@ip158 sw]# mkdir mysql
将根目录下的文件移动到mysql文件夹
[root@ip158 ~]# mv My* ./sw/mysql
进去查看一下
[root@ip158 ~]# cd sw/mysql/
[root@ip158 mysql]# ls
MySQL-5.5.62-1.el7.x86_64.rpm-bundle.tar
MySQL-client-5.5.62-1.el7.x86_64.rpm
MySQL-devel-5.5.62-1.el7.x86_64.rpm
MySQL-embedded-5.5.62-1.el7.x86_64.rpm
MySQL-server-5.5.62-1.el7.x86_64.rpm
MySQL-shared-5.5.62-1.el7.x86_64.rpm
MySQL-shared-compat-5.5.62-1.el7.x86_64.rpm
MySQL-test-5.5.62-1.el7.x86_64.rpm
3.移除软件mariadb-libs:
[root@ip158 mysql]# yum remove mariadb-libs.x86_64
4.找到软件包的位置,联网安装
[root@ip158 mysql]# yum install MySQL-server-5.5.62-1.el7.x86_64.rpm
5.开启mysql
[root@ip158 mysql]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.235.2
[root@ip158 mysql]# systemctl status mysql
● mysql.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysql; bad; vendor preset: disabled)
Active: inactive (dead)
Docs: man:systemd-sysv-generator(8)
[root@ip158 mysql]#systemctl start mysql
6.安装mysql客户端
yum install MySQL-client-5.5.62-1.el7.x86_64.rpm
7.进入mysql
[root@ip158 mysql]# mysql
mysql>show tables;(报错)
来改变情况吧!
.mysql> use mysql;
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
.需要修改密码:
update user set Password=password("root") where User='root';
.退出:quit;
.重启:systemctl restart mysql
.再次进入:
mysql -p
可以查看密码
mysql> select user,host,password from user;
Mysql安装(二)
1、安装mysql命令:Yum install mysql-server -y (-y参数作用为所有需要输入yes的地方默认yes)
2、打开mysql服务:Service mysqld start
3、设置mysql服务开机自启动(也可以不设置,开机手动启动):chkconfig –add mysqld
4、进入mysql命令行:mysql -u root -p (root是账户不是必须root) 第一次进入不需要输密码可以直接:mysql命令进入mysql
5、设置密码-第一次没有密码情况下设置:mysqladmin -u root password qixiao123
->如果不在第5步设置,也可以在Mysql命令行下修改密码(先进入mysql):update user set password=password(‘新密码’) where user=‘root’ FLUSH PRIVILEGES
执行到这里可以输入几个mysql命令来进行测试一下:
显示数据库: show databases;
使用数据库: use mysql;
显示表: show tables;
2、配置系统环境变量
1、编辑/etc/profile文件,增加hive相关的环境变量配置
2、配置Hive 环境变量文件中HADOOP_HOME环境变量
export HIVE_HOME=/root/sw/hive
export PATH=$PATH:$HIVE_HOME/bin
3、配置元数据信息 vi hive-site.xml
进入conf目录下查看
cd /root/sw/hive/conf/
如果没有:
cp hive-default.xml.template hive-site.xml
1、配置:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
2.复制mysql的驱动程序到hive/lib下面(这里已经拷贝好了)
[root@xxx lib]# ll mysql-connector-java-5.1.18-bin.jar
3.在mysql中hive的schema(在此之前需要创建mysql下的hive数据库)
1 [root@xxx bin]# pwd
2 /root/swl/hive/bin
3 [root@xxx bin]# schematool -dbType mysql -initSchema
4.执行hive命令
[root@xxx hive]# hive
hive测试
hive> create database hive_1;
2 OK
3 Time taken: 1.432 seconds
hive> show databases;
2 OK
3 default
4 hive_1
5 Time taken: 1.25 seconds, Fetched: 2 row(s)
创建库成功!