1.Hive简介
1.1什么是Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。
其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的客户端。
1.2为什么使用Hive
-
直接使用hadoop所面临的问题
人员学习成本太高
项目周期要求太短
MapReduce实现复杂查询逻辑开发难度太大
-
为什么要使用Hive
操作接口采用类SQL语法,提供快速开发的能力。
避免了去写MapReduce,减少开发人员的学习成本。
功能扩展很方便。
1.3Hive的特点
-
可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
-
延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
-
容错
良好的容错性,节点出现问题SQL仍可完成执行。
1.4Hive架构图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Ns5q3fR-1641900451479)(day03_hive.assets/1626600008411.png)]
1.5Hive与Hadoop的关系
Hive利用HDFS存储数据,利用MapReduce查询分析数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hnrDala4-1641900451480)(day03_hive.assets/1626600042482.png)]
1.6Hive与传统数据库对比
hive用于海量数据的离线数据分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-25jqzLm0-1641900451480)(day03_hive.assets/1626600114043.png)]
总结:hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析
2.HIVE的安装部署
1.derby版hive直接使用
前提:Hive安装非常简单,解压之后即可直接运行,不需要太多配置,前提是要配置JAVA_HOME和HADOOP_HOME。并且Hadoop要全量启动(五个进程)
1、解压hive
cd /opt/softwares
tar -xvzf apache-hive-2.3.6-bin.tar.gz -C ../servers/
2.修改目录名称
cd ../servers/
mv apache-hive-2.3.6-bin hive-2.3.6
3.初始化元数据库
cd hive-2.3.6
bin/schematool -dbType derby -initSchema
4.启动
在hive-2.3.6目录下执行
bin/hive
5.创建数据库
create database jtdb;
6.创建表
use jtdb;
create table tb_user(id int,name string);
7.插入数据
insert into table tb_user values(1,"zhangfei");
Hive在必要的时候会将HQL编译为MR来执行。
8.可能遇到的问题
Hive启动不了
检查JAVA_HOME和HADOOP_HOME是否配置成功。如果没有问题并报错:Cannot find hadoop installation: $HADOOP_HOME or $HADOOP_PREFIX must be set or hadoop must be in the path
解决办法:
指定HADOOP_HOME路径
cd /opt/servers/hive-2.3.6/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
增加HADOOP_HOME
HADOOP_HOME=/opt/servers/hadoop-2.7.7
9.Hive启动报错Safe mode
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6w2GdfzR-1641900451481)(day03_hive.assets/20200519195131390.png)]
Hadoop在启动时有个安全模式,其在启动时有些工作要做,元数据的处理,DataNode的等待等过程。需要一段时间,遇到时需要等一段时间,耐心稍微等一会。过会自动就会好。
如果长时间还报错,还在安全模式。可以手工设置退出安全模式。
hadoop dfsadmin -safemode leave
参数value的说明如下:
- enter - 进入安全模式
- leave - 强制NameNode离开安全模式
- get - 返回安全模式是否开启的信息
- wait - 等待,一直到安全模式结束
2.基于mysql管理元数据版hive
Hive没有将描述数据库、表、数据之间关系的元数据直接存放在HDFS中,而是存放在了传统的关系型数据库中,这样保证了元数据可以快速的进行增删改查。
Hive原生的将元数据保存在了内置的Derby数据库中。
Derby存在的问题:过于轻量级,性能较低,安全性不高,不适合生产。
这种情况我们是无法忍受的,实际开发中不会使用Derby来做Hive的元数据库。所以我们要将他替换掉。以mysql为例。
1、解压hive
cd /opt/softwares
tar -xvzf apache-hive-2.3.6-bin.tar.gz -C ../servers/
2.修改目录名称
cd ../servers/
mv apache-hive-2.3.6-bin hive-2.3.6
3.检测服务器mysql数据库
mysql
show databases;
4.配置mysql允许外网访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
5.退出mysql
exit;
6.使用sqlyog连接mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXjpuoUZ-1641900451481)(day03_hive.assets/1626601184572.png)]
7.修改配置文件hive-site.xml
创建hive-site.xml
touch hive-site.xml
添加以下内容
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.def