Hive简介
2019-07-09 本文已影响0人
上山走18398
简述
Hive是基于Hadoop之上的数据仓库
什么是数据仓库:就是数据库
如何搭建数据仓库
创建的过程是什么
如何把数据导入到数据仓库?
构建在hadoop HDFS的一个数据仓库,就是一个数据库
Hive的体系结构是什么?
Hive如何与Hadoop HDFS进行相互操作
Hive数据与Hadoop中的文件之间的关系
Hive的安装和管理: 3种方式
Hive的数据模型和操作
数据仓库
数据仓库是一个面向主题的,继承的,不可更新的,随时间不变化的数据集合
它用于支持企业或组织的决策分析处理
主题? -- 商品推荐系统--? 商品
集成的--原来的数据库(可能来自oracle mysql 等),不同的数据集成起来
主要就是为了查询
2. 数据仓库的结构和建立过程
|数据源(数据库,文档资料,或者其他数据资料)|
| | 数据存储于管理
| | 抽取(Extract)
| 业务数据系统 |
| |
| |
| 文档资料 |转换(transform)
| |
| |
| 其他数据 |装载(load)
| |
数据源 --》 数据存储--》数据仓库引擎 --》前端展示
OLTP应用 与 OLAP应用
典型的OLTP应用 :银行转账 事务
OLAP:商品推荐系统,主要面向的是查询,历史数据
数据仓库中的数据模型
星型模型: 以一个主题为核心
雪花模型:不停扩展
什么是Hive
1. Hive是建立在Hadoop HDFS上的数据仓库基础架构
2. Hive可以用来进行数据提取转化加载(ETL)
3. Hive定义了简单的类似SQL查询语言,成为HQL它允许属性SQL的用户查询数据
4. Hive允许熟悉MapReduce开发者的开发自定义的mapper和reducer 来处理內建的mapper和reducer无法完成的复杂的分析工作
5. Hive是SQL解析引擎,它将SQL语句转化成M/R job 然后在Hadoop执行
6. Hive的表其实就是HDFS的目录/文件
Hive的体现结构 (支持mysql derby oracle)
1. Hive的元数据
- Hive 将元数据存储在数据库中(metastore),支持mysql、Derby、oracle等数据库,默认derby
- Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表),表的数据所在目录
2. Hive的体现结构之HQL的执行过程
一条HQL语句如何在hive中进行查询
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、
优化以及查询计划(Plan)的生成
生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行
3. Hive的体系结构
Hadoop
- 用HDFS进行存储,利用MapReduce计算
元数据存储(MetaStore)
- 通常是存储在关系数据库如 mysql、derby中
Hive 的安装
Hive的管理(对数据仓库管理)
- Hive的管理之CLI方式
启动方式:
- 直接输入#<HIVE_HOME>/bin/hive的执行程序
- 或者输入#hive --service cli
常用的CLI命令
1. 清屏
Ctrl + L 或者 !clear;
2. 查看数据仓库中的表
show tables;
show tables --查看表信息 (--代表注释)
3. 查看数据仓库中内置的函数
show functions;
4. 查看表的结构 (一个表对应HDFS上一个文件夹?)
desc 表名
5. 查看HDFS上的文件
dfs -ls 目录
6. 执行操作系统的命令
! 命令
7. 执行HQL语句(执行的原理)
select ***from ***
转换成MapReduce作业
不转换: *
Hive -S 进入静默模式不产生MapReduce的调试信息
Hive -e “show tables” //不进入hive模式
8. 执行SQL脚本
source SQL脚本
- Hive的管理之web界面方式
端口号 9999
Hive --service hwi&
浏览器: http://<ip地址>:9999/hwi/
# 命令保存,找不到文件
编译源代码,找到 hwi/ web
jar cvfM0 hive-hwi-0.13.0.war -C web/.
....配置文件 jar包等
Web管理器只能做查询操作
- Hive的管理之远程服务
端口号 10000
启动方式: hive --service hiveserver &
以JDBC或ODBC的程序登录到hive中操作数据时,必须选用远程服务启动方式
Hive的数据类型
基本数据类型
tinyint/smallint/int
boolean
float/double
string
eg.1
hive>create table perspn(
pid int,
pname string,
married boolean,
salary double
);
DECS PERSON;
//char(20) 和 varchar(可变长度)
复杂数据类型
Array:数组类型
Map:集合类型
Struct:结构类型
时间类型
Date
TimeStamp
Hive的数据模型
Hive的数据储存
//show tables;
基于HDFS
没有专门的数据储存格式
存储结构主要包括:数据库,文件,表,视图
可以直接加载文本文件(.txt文件等)
创建表时,指定Hive数据的列分隔符与行分隔符
- 表
Table 内部表
Partition 分区表
External Table 外部表
Bucket Table 桶表
Table 内部表
1. 与数据库中的Table在概念上类似
2. 每一个Table在Hive中都有一个相应的目录存储数据
3. 所有的Table数据(不包括External)都保存在这个目录中
//一个表就是一个目录?
4. 删除表时,元数据与数据都会被删除
创建表时,未指定目录,创建为/user/hive/warehouse下
location 指定路径
row format delimited fields terminated by "," //指定分隔符
Partition 分区表
1. Partition 对应于数据库的Partition列的密集索引
2. 在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中
//partitioned by (gender string)
//Partition Information
eg.1
insert into table partition_table partition(gender="M") select...
数据量大是,可以提供查询效率
explain 查询执行计划,看是否有优化
外部表
1. 指向已经在HDFS中存在的数据,可以创建Partition
2. 他和内部表在元数据的组织上是相同的,而实际数据的存储则有较大差异
3. 外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除该链接
eg.1
create external table ..
(
..
)
rmat
location ..
.
>create external table external_student (sid int, sname string, age int) row format delimited fields terminate location '/input';
桶表(Bucket Table) 桶表是对数据进行哈希取值,然后放到不同文件存储。
也就是说,桶表中的数据,是通过哈希运算后,将其打散,再存入文件当中,这样做会避免造成热块,从而提高查询速度。
create table bucket_table1 (name string,age int) clustered by(name)into 5 buckets;
视图(View)
-视图是一种虚表,是一个逻辑概念;可以跨越多张表
-视图建立在已有基础上,视图赖以建立的这些表称为基表
-视图可以简化复杂的查询
create view empinfo
as
select e.empno,e.ename,e.sal,e.sal*12 annlsal,d.dname from emp e,dept d
where e.deptno=d.deptno;
//视图简化查询,依赖表
不支持雾化视图
- 视图