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;
//视图简化查询,依赖表
不支持雾化视图
上一篇下一篇

猜你喜欢

热点阅读