一.数据仓库
1.定义
英文名:Data Warehouse 简称DW
面向分析的存储系统,其特点有:面向主题,集成,不可修改,反映历史变化.
2.数据仓库和数据库的对比
主要联系:1.二者都是用来存储数据的
2.数据仓库是数据库的衍生及应用
3.二者存在数据交互,你中有我,我中有你
主要区别:1.数据库面向事务,数据仓库面向主题
2.数据库实时性强,吞吐量小但空间有限
3.数据仓库吞吐量大,但实时性弱,空间巨大
4.数据库尽量避免冗余,数据仓库有意引入冗余
二.Hive
1.产生背景
1.1为了让非程序员便捷使用大数据
1.2降低程序员处理大数据的难度和成本
1.3基于hadoop的数据仓库应用广泛
1.4FaceBook强大的商业需求和商业化运作
2.定义
Hive是建立在hadoop上的数据仓库的基础架构和解决方案
3.作用
提供了数据仓库的构建和完整的解决方案
4.意义
基于hadoop解决了企业数据仓库构建的核心问题,证明了hadoop平台的强大,降低了hadoop的使用门槛
5.Hive在hadoop生态圈的地位
三.Hive的架构设计
1.基本使用
hive 进入hive cli
show databases 查看所有数据库
create database 创建数据库
use (database name) 使用数据库
show tables 查看数据库中所有表
......
2.架构设计
注意:在2.2版本以后,去掉了HWI模块,HiveCLI模式也采用beeline链接
3.运行流程
四.Hive基础应用
1.基础概念
1.1数据模型
1.2数据类型
1.2.1数值型
类型 |
说明 |
TINYINT |
1-byte signed integer from -128 to 127 |
SMALLINT |
2-byte signed integer from -32,768 to 32,767 |
INT INTEGER |
4-byte signed integer from -2,147,483,648 to 2,147,483,647 |
BIGINT |
8-byte signed integer from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
FLOAT |
4-byte single precision floating point number |
DOUBLE |
8-byte double precision floating point number PRECISION |
DECIMAL |
Decimal datatype was introduced in Hive0.11.0 (HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976) |
1.2.2日期类型
类型 |
说明 |
TIMESTAMP |
UNIX时间戳和可选的纳秒精度 |
DATE |
描述特定的年/月/日,格式为YYYY-MM-DD |
1.2.3字符串
类型 |
说明 |
string |
最常用的字符串格式,等同于java String |
varchar |
变长字符串,hive用的较多,最长为65535 |
char |
定长字符串,比varchar更多一些,一般不要超过255个字符 |
1.2.4布尔类型
类型 |
说明 |
boolean |
等同于java的boolean用的很少 |
1.2.5字节数组
类型 |
说明 |
binary |
字节数组类型,可以存储任意类型的数据用的很少 |
1.2.6复杂数据类型
数据类型 |
描述 |
字面语法示例 |
STRUCT |
和C语言中的struct或者”对象”类似,都可以通过”点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, lastdt STRING},那么第1个元素可以通过字段名.first来引用 |
struct( ‘John’, ‘Doe’) |
MAP |
MAP是一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取值’Doe’ |
map(‘first’, ‘John’, ‘last’, ‘Doe’) |
ARRAY |
数组是一组具有相同类型的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第1个元素可以通过数组名[0]进行引用 |
ARRAY( ‘John’, ‘Doe’) |
1.3Hive数据文件格式和压缩格式
1.3.1文件格式
面向行/列类型 |
类型名称 |
是否可切割计算 |
优点 |
缺点 |
适用场景 |
面向行 |
文本文件格式(.txt) |
可以 |
查看、编辑简单 |
无压缩占空间大、传输压力大、数据解析开销大 |
学习练习使用 |
面向行 |
SequenceFile序列文件格式(.seq) |
可以 |
自支持、二进制kv存储、支持行和块压缩 |
本地查看不方便:小文件合并成kv结构后不易查看内部数据 |
生产环境使用、map输出的默认文件格式 |
面向列 |
rcfile文件格式(.rc) |
可以 |
数据加载快、查询快、空间利用率高、高负载能力 |
每一项都不是最高 |
学习、生产均可 |
面向列 |
orcfile文件格式(.orc) |
可以 |
兼具rcfile优点、进一步提高了读取、存储效率、新数据类型的支持 |
每一项都不是最高 |
学习、生产均可 |
1.3.2压缩格式
可切分性 |
类型名称 |
是否原生支持 |
优点 |
缺点 |
适用场景 |
可切分 |
lzo(.lzo) |
否 |
压缩/解压速度快 合理的压缩率 |
压缩率比gzip低 不原生、需要native安装 |
单个文件越大,lzo优点越越明显。压缩完成后>=200M为宜 |
可切分 |
bzip2(.bz2) |
是 |
高压缩率超过gzip 原生支持、不需要native安装、用linux bzip可解压操作 |
压缩/解压速率慢 |
处理速度要求不高、要求高压缩率(冷数据处理经常使用) |
不可切分 |
gzip(.gz) |
是 |
压缩/解压速度快 原生/native都支持使用方便 |
不可切分、对CPU要求较高 |
压缩完成后<=130M的文件适宜 |
不可切分 |
snappy(.snappy) |
否 |
高速压缩/解压速度 合理的压缩率 |
压缩率比gzip低 不原生、需要native安装 |
适合作为map->reduce或是job数据流的中间数据传输格式 |
1.4数据操作分类
2.HiveSQL
2.1DDL
元数据:描述数据的数据
内表:元数据和数据本身均被Hive管理,删除表全部会删除
外表:元数据被Hive管理,数据本身存在hdfs,删除表只删除元数据,不影响数据本身
2.2DML
将本地数据文件加载到表中:load data local inpath ....overwrite into table .... partition();
将hdfs目录下的文件加载到表中:load data inpath ...overwrite into table...
将查询结果插入表中:insert overwrite table ... select ...
动态分区注意设置非严格模式
2.3DQL
select * from ... 查询所有
select * from ... where 根据条件查询所有
还可以加入limit,设置升序降序
join查询分为 inner join left outer join right outer join full outer join
union分为 union all将所有数据叠加,不去重
union将所有数据叠加且去重
3.Hive系统函数