Hive是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一个表。并提供类SQL查询功能。
数据仓库
数据库是用来支撑在线联机业务的。比如页面上的数据的展示,保存客户操作产生的数据。这类要求变更是实时的、事务的。
数据仓库:如果联机数据库中的数据太大了,需要将历史信息导入到离线的仓库中。可以存入各种各样的系统的数据。可以按照一定主题来组织这些表。每一个主题中的数据可能结构跟系统的表不同。可能需要从运行数据库中多个表中得到。面向历史的。
数据仓库的建模模型
不遵循数据库范式,绝大部分是宽表,冗余没关系。因为目标不同,设计就不同。大部分都是以空间换时间。
几个建模的模型:
- 星型
- 雪花型
- 三范式型(不常用)
数据仓库有什么用
做统计,做数据分析。比如统计年度销售额,月度销售额,广告推荐等。
为什么用Hive
使用Hadoop面临的问题:
- 学习成本很高
- 项目周期要求太短
- MapReduce实现复杂查询逻辑开发难度太大
为什么用Hive:
- 操作接口采用类SQL语法,提供快速开发的能力。
- 避免了写MapReduce
Hive的工作机制
将清洗过的数据放入到HDFS中,就可以进行各种统计了。但是有些需求用MapReduce写起来非常难,所以有了Hive。
先上一张架构图。
Hive提供接口,用户可以用它创建表。表会放在/user/hive/warehouse/,一张表就是一个目录。元信息会记录在关系型数据库中(MySQL),它也内置了Debby,但是它是嵌入式的数据库,会造成不同Hive建表不可见的问题。
可以在Hive中建表,最好字段类型都用String,比较方便。
然后就可以使用SQL语句查询了。每一个SQL语句都被Hive的语法解析器解析、组装成一个MapReduce程序,然后提交给YARN,运行完成后就可以把结果输出出来。也可以把结果写到其他表里面。