目录
一、数据仓库介绍
数据仓库是一个支持管理决策的数据集合。数据是面向主题的、集成的、不易丢失的、时变的。数据仓库是所有操作环境和外部数据源的快照集合。
1、数据仓库的特点
面向主题的:数据仓库都是基于某个明确的主题的,仅需要与主题相关的信息,其他细节信息会被排除掉。
集成的:从不同的数据源采集数据到同一个数据源,此过程会有一些ETL操作。
随时间变化的:关键数据隐式或者显式的随时间变化。
信息本身相对稳定的:数据装入之后一般只会进行查询操作,没有传统数据库的改操作。
2、数据仓库的基础架构
数据采集:数据采集层的任务就是从各种数据源中采集和存储到数据存储上,期间可能会做一些etl操作。
数据源有很多种:
日志:占份额最大,存储在备份服务器上。
业务数据库:如MySQL,Oracle等
来自Http/FTP的数据:合作伙伴提供的接口
其他数据源:如Excel等需要手动录入的数据
数据存储与分析:HDFS是大数据环境下数据仓库/数据存储最完美的解决方案。对于离线的数据的分析与计算,也就是对实时性要求不高的部分,hive是一个不错的工具。也可以使用MapReduce进行离线数据处理。使用Spark生态体系技术完成数据的离线和实时计算分析。
数据共享:前面使用hive、MR、Spark分析和计算的结果还是在HDFS上面,但大多数的业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,是的各种业务和产品能方便的获取数据。这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库。
数据应用:
报表:报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层。
接口:接口的数据都是直接查询数据共享层即可得到。
即席查询:即席查询通常是现有的报表和数据共享层的数据并不能满足需求,需要从数据存储层直接查询。一般都是通过直接操作SQL得到。
二、Hive基本概念
1. Hive是什么
Hive 是一个基于Hadoop的数仓工具。
Hive 可以将结构化的数据映射为一张表,提供类SQL的查询语句HQL。
Hive 的本质是一个翻译工具,将HQL语句转化为MapReduce程序提交到Yarn上运行。
Hive使用MapReduce完成数据计算,数据存储在HDFS上面,所以可以认为Hive是Hadoop的一个客户端。
2. Hive的优缺点
优点:
(1)操作数据采用类SQL语法,简单易上手。
(2)避免了写MapReduce,减少人工学习成本。
(3)适合实时性要求不高的数据分析场景。
(4)处理大数据优势明显。
(5)Hive支持用户自定义函数,用户可以按照自己的需求实现自己的函数。
缺点:
(1)迭代式算法无法表达。
(2)数据挖掘方面不擅长。
(3)延迟较高,效率低。
(4)自动生成MapReduce作业,通常情况下不过智能。
(5)Hive调优比较困难,粒度较粗,较通用,不够具体。
(6)HQL表达能力有限。
3. Hive和数据库比较
Hive | 数据库 | |
---|---|---|
查询语言 | HQL | SQL |
存储数据位置 | HDFS | 块设备或者本地文件系统 |
数据更新 | 不建议修改数据 | 经常修改数据 |
索引 | 不建立索引,但是通过MR对数据进行访问,对于大数据的访问有优势 | 会针对一个或者几个建立索引,对于少量的特定条件的数据访问效率比较高 |
执行 | 大多数执行通过Hadoop提供的MR进行 | 有自己的搜索引擎 |
执行延迟 | 没有索引和MR框架使得Hive的延迟比较高, 但是在数据规模超过数据库的处理能力的时候,hive的并行优势比较明显 | 延迟比较低,但是有一定的数据规模限制 |
可扩展性 | 可扩展的 | 扩展能力有限 |
数据规模 | 支持大规模 | 小规模 |
4. Hive的架构原理
1.用户接口:Client
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
2.元数据:Metastore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
3.Hadoop
使用HDFS进行存储,使用MapReduce进行计算。
4.驱动器:Driver
(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
三、Hive数据类型
1. 基本数据类型
Hive数据类型 | Java数据类型 | 长度 | 例子 |
---|---|---|---|
TINYINT | byte | 1byte有符号整数 | 20 |
SMALINT | short | 2byte有符号整数 | 20 |
INT | int | 4byte有符号整数 | 20 |
BIGINT | long | 8byte有符号整数 | 20 |
BOOLEAN | boolean | 布尔类型,true或者false | TRUE FALSE |
FLOAT | float | 单精度浮点数 | 3.14159 |
DOUBLE | double | 双精度浮点数 | 3.14159 |
STRING | string | 字符系列。可以指定字符集。可以使用单引号或者双引号。 | ‘now is the time’ “for all good men” |
TIMESTAMP |
| 时间类型 |
|
BINARY |
| 字节数组 |
|
对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。
2. 类型转化
Hive的数据类型是可以进行隐式转换的,类似于Java的类型转换。例如,某表达式使用的INT类型,那么TINYINT可以隐式转换为INT,但是Hive不能反向转换。例如某表达式使用过的TINYINT,INT类型不会转换为TINYINT,他会返回错误。
隐式转换规则如下:
(1)任何整数类型都可以隐式的转换为另一范围更广的数据类型,例如,TINYINT可以转换为INT,INT可以转换为BIGINT。
(2)所有的整数类型,FLOAT类型和STRING类型都可以隐式的转换为DOUBLE类型。
(3)TINYINT,SMALINT和INT都可以隐式的转换为FLOAT类型。
(4)BOOLEAN不可以转换为任何类型。
总结
Hive的入门简介,对Hive有一个简单认识,并且引入了数据仓库的概念,后面的文章会对Hive继续进行学习