Hive入门
1. 多彩缤纷的数据源
由上图可以看出数据的来源有很多.
- 业务系统数据 : 获取方式容易 , 成本低
- 通过接口调用获取
- 数据库dump获取
- 爬虫数据 :
- 爬虫 : 是按照一定的规则 , 自动的抓取万维网信息的脚本或者程序
- …
2 . 数据的管理
2.1 数据文件管理
由于数据种类的越来越多 , 数据量的越来越大 , 企业中数据跨部门的存储和调用都推动了数据文件管理的产生 . 文件管理的真谛在于方便保存和迅速提取
. 解决这一问题的最理想方法就是分类管理
从每一个文件夹的建立,我们都要按照数据文件的属性,分为大大小小、多个层级的文件夹,建立合理的文件保存架构。此外所有的文件、文件夹,都要规范化地命名,并放入最合适的文件夹中。
分类管理的好处:
- 定时集中对文件进行备份
- 可以统一制定文件安全访问权限策略
- 可以统一进行文件服务器防病毒管理
- 最重要的是方便数据的保存和迅速提取
常见的文件服务 :
- FTP文件服务 : 是一个
文件传输的协议
,采用 Client/Server 架构。 - NFS文件服务 : 是 Network File System 的缩写,即网络文件系统 , 依赖于RPC协议(远程过程调用(Remote Procedure Call))
- Samba文件服务 : 是一组软件包,在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件。
2.2 文件管理规范
规范着重于文件命名规则,以及一些校验性文件的描述。
例子 : FTP 服务进行跨部门文件共享的相关规范 . 目录下会存在以下 3 种格式文件。仅供参考。
2.2.1 接口新增数据文件
正常数据:文件类型标示_源系统数据库类型简写.源系统数据库.表名称_数据日期_重传序号.lzo
增量 : i_s.Peking.orders_20130711_000.lzo
全量 : a_s.Peking.orders_20130711_000.lzo
保证了文件的有序存储和获取
2.2.2 接口控制校验文件
正常数据:增全量标示_源系统数据库类型简写.源系统数据库.表名称_数据日期_重传序号.md5
增量: i_s.peking.orders_20130711_000.md5
全量 : a_s.peking.orders_20130711_000.md5
保证了数据的安全 , 完整性
2.2.3 接口表结构文件
正常数据:增全量标示_源系统数据库类型简写.源系统数据库.表名称_数据日期_重传序号.xml
增量 : i_s.peking.orders_20130711_000.xml
全量 : a_s.peking.orders_20130711_000.xml
记录了对文件的操作
表结构文件存在意义在于:便于数据的使用人员快速的了解本批次数据的大致内容,也方便后续回头对数据进行检测时作为依照。
例子 : 企业跨部门文件管理图解
2.3 数据质量检测
评估标准 :
- 完整性 : 数据信息是否存在缺失的状况
- 一致性 : 数据是否遵循了统一的规范 , 数据集合是否保持了统一的格式
- 准确性 : 数据记录的信息是否存在异常或错误
- 及时性 : 数据从产生到可以查看的时间间隔 , 也叫数据的延时时长
何为好的数据 : 在应用数据之前根据标准检查数据是否符合本次需求 符合本次需求的数据就是好数据
4. 数据仓库
4.1 数据仓库的基本概念
数据仓库 , 英文名称为Data Warehouse , 可简写DW
或DWH . 数据仓库的目的是构建面向分析
的集成化数据环境 , 为企业提供决策支持(Decision Support) .
4.2 数据仓库的主要特征
- 面向主题
- 集成
- 非易失
- 时变
4.2.1 面向主题
主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。例如汽车保险 , 养老保险 , 医疗保险等的就可以将保险作为主题 .
4.2.2 集成性
对分散、独立、异构的数据库数据进行抽取、清理、转换和汇总
便得到了数据仓库的数据.
将数据传到数据仓库之前需要经过ETL(抽取Extra , 转化Transfer , 装载Load)
操作 .
4.2.3 非易失性(不可更新性)
数据仓库的数据反映的是一段相当长的时间内历史数据的内容 , 数据仓库中一般有大量的查询操作,但修改和删除操作很少。因此,数据经加工和集成进入数据仓库后是极少更新的,通常只需要定期的加载和更新。
4.2.4 时变性
数据仓库的目的是通过分析企业过去一段时间业务的经营状况,挖掘其中隐藏的模式。数据仓库的数据需要更新,以适应决策的需要。
数据仓库的数据随时间的变化表现在以下几个方面。
(1)数据仓库的数据时限一般要远远长于操作型数据的数据时限。
(2)操作型系统存储的是当前数据,而数据仓库中的数据是历史数据。
(3)数据仓库中的数据是按照时间顺序追加的,它们都带有时间属性。
4.3 数据仓库与数据库区别
数据库与数据仓库的区别实际讲的是 OLTP
与 OLAP
的区别。
操作型处理
,叫联机事务处理 OLTP
(On-Line Transaction Processing), 也可以称面向交易的处理系统 , 它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。传统数据库即是如此 .分析型处理
,叫联机分析处理 OLAP
(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。数据仓库即是如此 .
首先要明白,数据仓库的出现,并不是要取代数据库。
数据库
是面向事务
的设计,数据仓库
是面向分析
设计的。- 数据库一般存储
业务数据
,数据仓库存储的一般是历史数据
。 - 数据库设计是尽量避免冗余 , 一般针对某一业务应用进行设计 ; 数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
- 数据库是为
捕获数据
而设计,数据仓库是为分析数据
而设计。
数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”(并非真正的数据库)。
4.4 数据仓库分层架构
按照数据流入流出的过程,数据仓库架构可分为三层—— 源数据、 数据仓库、数据应用
数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。
- 源数据层(ODS) : 此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
- 数据仓库层(DW) : 也称为细节层,DW 层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
- 数据应用层(DA 或 APP) : 前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。
分层的目的在于用空间换时间 用多步代替一步。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是 ETL(抽取 Extra, 转化 Transfer, 装载 Load)
的过程,ETL 是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持 ETL 的正常和稳定。
数据仓库为何而来 ?
数据仓库为了数据分析而出现
不生产数据 , 数据来自于数据库或者其他数据源
不消费数据 , 数据结果提供给其他数据应用使用
数据的搬运工
-
数据仓库
-
具备数据存储能力
-
具备数据ETL能力
hive作为数据仓库 当然具备上述能力。
hive使用hadoop hdfs 完成数据的存储
hive使用hadoop mapreduce进行数据ETL(sql---->mapreduce---->etl)
hive是一个基于hadoop的数据仓库。
-
4.5 数据仓库元数据管理
元数据(Meta Date),主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及 ETL 的任务运行状态。
元数据可分为技术元数据
和业务元数据
。
元数据:用于描述数据的数据 解释性数据 数据字典
5. Apache Hive
5.1 简介
Hive 是基于 Hadoop 的一个数据仓库工具
,可以将结构化的数据文件映射
为一张数据库表,并提供类 SQL 查询功能
。本质是将SQL转换为MapReduce程序
.
主要用途:用来做离线数据分析,比直接用 MapReduce 开发效率更高。
5.2 Hive架构
5.2.1 Hive架构图
- 用户编写sql语句 , 传递到hive中的sql语法解释器 , 根据映射信息解析出表和字段的意义, 此时是与DB进行交互 , DB中记录表和文件映射关系
- 同时hive会去调用MR模板库 , 组装成对应的mr
- 组装好的mr传递给MR提交其 , 用提交器提交mr程序给yarn执行 , 处理该数据
- yarn处理完数据后返回给用户结果
- 我们发现我们只需要编写sql语句 , 即可等待mr程序运行 , 而中间的任务都由hive帮我们完成了
5.2.2 Hive组件
- 用户接口 : 包括 CLI、JDBC/ODBC、WebGUI。其中,
CLI(command line interface)为 shell 命令行
;JDBC/ODBC 是 Hive 的 JAVA 实现,与传统数据库JDBC 类似;WebGUI 是通过浏览器访问 Hive。 - 元数据存储 : 通常是存储在关系数据库如 mysql/derby 中 .
- 解释器、编译器、优化器、执行器 : 完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
5.2.3 Hive与Hadoop的关系
Hive利用HDFS存储数据,利用MapReduce查询分析数据。
5.3 Hive与传统数据库对比
5.4 Hive数据模型
在创建表时指定数据中的分隔符
,Hive 就可以映射成功,解析数据。
Hive 中包含以下数据模型:
db :在 hdfs 中表现为 hive.metastore.warehouse.dir 目录下一个文件夹
table :在 hdfs 中表现所属 db 目录下一个文件夹
external table :数据存放位置可以在 HDFS 任意指定路径
partition :在 hdfs 中表现为 table 目录下的子目录
bucket :在 hdfs 中表现为同一个表目录下根据 hash 散列之后的多个文件
5.5 Hive安装部署
Hive 安装前需要安装好 JDK
和 Hadoop
。配置好环境变量。
根据元数据存储的介质不同,分为下面两个版本,其中 derby 属于内嵌模式
。
实际生产环境中则使用mysql
来进行元数据的存储。
内置derby 版:
解压 hive 安装包
bin/hive 启动即可使用
缺点:不同路径启动 hive,每一个 hive 拥有一套自己的元数据,无法共享
mysql 版:
解压、修改配置文件
vi conf/hive-site.xml
配置 Mysql 元数据库信息
具体安装部署请见《Hive安装》