数据仓库 Data Warehouse, DW
面向主题的、集成的、非易失的且随时间变化的数据集合。主要用于组织积累的历史数据,并使用分析方法(OLAP、数据分析)进行分析整理。
数仓诞生原因
(1)历史数据积存:使用频率低,数据挤压导致性能下降
(2)企业数据分析需要:防止各部门抽取数据不一致,通过数仓每天/每时定期抽取数据,使企业中取得的数据具有统一性。数仓可直接调用API接口,对各个部门访问权限可控。
大数据处理流程
(1)数据抽取:数据采集、数据清洗
(2)数据存储:数据清洗、数据仓库、数据后台
(3)数据提取:数据处理、数据建模、数据可视化
(一)数据抽取
对数据进行【可批处理】/【需实时处理】的分类,需要结合业务考虑,因为实时处理要求高,而批处理便宜。集群资源是有限的,需要合理利用计算资源。
(二)数据存储
(1)数据处理
1.数据的前后一致:比如数据名称
2.数据的通用性:比如日期排列格式
3.数据的存储
4.考虑数据仓库的易用性
5.数据的安全性:不泄漏/不丢失/安全性
(2)数据分层存储
数据存储是分层架构的,架构模式与数据拉取方式和方便对数据进行处理两方面考虑,一般是三层数据仓库:
①贴源层ODS
②历史存储层MID
③数据模型层DM
(三)数据库提取
将多份数据查出来,互相关联合并,生成一张新的表单。
数据仓库的技术实现
传统数据仓库
有关系型数据库组成MPP(大规模并行处理)集群,比如mysql等。单机数据库。
大规模并行处理:将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。一般用中间件充当负载均衡等能力。
缺点
- 拓展性有限,数据交换需要高速网络来支撑
- 热点问题,只能通过数据加盐(给数据加个随机前缀,随机查询)的操作来解决
数据库的中间件
- 分库分表
- 读写分离
大数据数据仓库
分布式文件系统,默认会对数据进行备份
缺点
- 缺少事物支持(?啥意思)
- 任务少时计算较慢
-
MPP架构
扩展性较差
优先考虑C(一致性)、A(可用性)、P(分区容错性)
-
大数据架构(hadoop架构)
- 数据共享,不会出现单点挂了的现象,但数据吞吐量大,
- 优先考虑的是P(分区容错性)、A(可用性)、C(一致性)
- 也非常适合处理非结构化,半结构化数据
架构
-
数据应用层 ADS
- 报表决策
- 并发查询
- 搜索检索
-
公共维度模型层 CDM
- 数据汇总层DWS
- 数据明细层DWD
-
操作数据源层 ODS
- 原始数据
-
数据清洗层ETL
- Sqoop
- Kattle
- Other
数据表
一般ETL流程数据积存(ODS层) ,数据分析在DWD、DWS、ADS层。
数据应用层 ADS
也被称为数据集市。以报表的形式提供给业务系统进行展示,为外部世界提供访问接口。
公共维度模型层 CDM
(1)数据汇总层DWS
对各个明细表进行一个汇总,按照分析主题融合成一张宽表。模型并非3NF,更注重的是数据聚合、复杂查询、处理性能更优的数仓模型,如维度模型等。数据仓库的模型设计出现在本层。
(2)数据明细层DWD
数据明细层对ODS层的数据进行清洗、标准化、维度退化(时间、分类、地域)。模型仍是3NF模型。
操作数据源层 ODS
与原始数据保存一致,不允许修改,原始数据的扩充集,如更新类型等(插入、更新)。
数据清洗层ETL(Extraction Transformation Loading)
数据仓库通过ETL实现定期从数据表中同步数据(数据抽取)。
数据抽取Extraction
抽取的数据源可分为结构化、半结构化、非结构化数据。
结构化数据一般采用JDBC(JAVA数据库连接)、数据库日志方式;非/半结构化数据监听文件变动。
抽取方式:
- 全量同步:一般用于初始化数据装载;
- 增量同步:检测数据的变动,抽取发生变动的数据,一般用于数据更新。
ETL的规则设计占整个数据仓库搭建量的60%~80%。
数据转化 Transformation
主要针对非/半结构化数据
数据加载Loading
将处理完的数据导入对应的目标源里。
常见的ETL工具
结构化数据:Sqoop、Kettle、Datastage、Information、Kafka(消息队列)
非/半结构化数据:Flume、Logstash(Elastic家族产品)
建模
OLTP( on-line transaction processing,翻译为联机事务处理,主要是数据库- 增删改,日常操作)
两者介绍
OLTP:记录业务事件的发生,以增删改的方式在数据库中进行数据的更新处理操作。常见的业务系统如ERP,CRM,OA等。
OLAP:当数据积累到一定程度的时候,对过去一段时间内的数据拿出来做统计分析,就是OLAP。
可以说OLTP是数据库的应用,OLAP是数据仓库的应用。
OLAP又分为ROLAP(关系型联机分析处理)和MOLAP(多维联机分析处理)。
建模方法
OLTP(在线事务处理)
主要操作是随机读写。为保证数据一致性,常采用的关系模型,使用三范式(3NF)来减少冗余。
OLAP(在线联机分析)
更关注于分析数据,关注数据整合。
根据数据存储方式不同,又分为ROLAP、MOLAP、HOLAP。
- ROLAP (relation OLAP,关系型OLAP):使用关系模型构建,存储系统一般为RDBMS(关系数据库管理系统)。
- MOLAP(Multidimensional OLAP,多维型OLAP):预先聚合计算,使用多维数组的形式保存数据结果,加快查询分析时间。不存明细数据(表数据),只存结果。
- HOLAP(Hybrid OLAP,混合架构的OLAP):ROLAP和MOLAP两者的集成;如低层是关系型的,高层是多维矩阵型的;查询效率高于ROLAP,低于MOLAP。
ROLAP建模方法
一般采用维度模型建模方法(维度:对事物进行组织、分类)。
维度模型:分为星型模型、雪花模型、星座模型。
1、星型模型
维度只有一层,分析性能最优。
2、雪花模型
多层维度,较为灵活,但性能较差。
3、星座模型
基于多个事实表,事实表之间会共享一些维度表。
业务增长的情况下形成的,是公司中最常见的。
*宽表模型
维度模型的衍生。
MOLAP建模方法
MOLAP将数据进行预结算,并将聚合结果存储到CUBE模型中
CUBE模型以多维数组的形式,物化到存储系统中,加快后续的查询
生成CUBE需要大量的时间、空间,维度预处理可能会导致数据膨胀。
常见的MOLAP产品:Kylin、Durid
OLAP多维分析
OLAP主要操作是复杂查询,可以多表关联,使用COUNT等聚合函数。
OLAP对复杂查询操作做了直观定义,包括钻取、切片、切块、旋转:
实践理论
表类型
-
事实表
存储显示存在的业务对象。
-
维度表
对应的业务状态,方便对数据进行统计、聚合等计算。
-
事实事物表
随着业务产生数据,产生后不会修改。
-
周期快照事实表
随着业务周期的推进而变化,如年、季度累积。是周期+状态度量的组合,如年累积订单数(年-周期,订单总数-量度)。
-
累积快照事实表
记录不确定周期的度量统计,完全覆盖一个事实的生命周期,如订单状态表。只有一条记录,多个时间字段。
*因为可修改,实现难度较大。
累积快照事实表实现
(1)日期分区表,全量数据记录,每天的分区存储昨天全量数据与当天增量数据合并的结果。但数据量大将导致全量表膨胀,存储永远不更新的冷数据,对性能影响较大。*仅适用于数据量少的情况。
(2)日期分区表,推测数据最长生命周期,存储周期内的数据;周期外的冷数据存储到归档表。需要保留多天的分区数据,存储消耗依然很大。
(3)日期分区表,以业务实体的结束时间分区,每天的分区存放当天结束的数据。另外设计一个时间非常大的分区,存放截止当前未结束的数据。有点:数据无冗余。
*拉链表
记录每条信息的生命周期,保留数据的所有变更状态。表数据的随机修改方式是增序追加。
ETL策略
- 全量同步
- 增量同步
任务调度
主要为了解决任务单元间的依赖关系和自动化完成任务的定时执行。
常见的任务类型有Shell,Java程序,Mapreduce程序、SQL脚本。
常见的调度工具:Azkaban、Oozie
除了任务调度系统,还有一个资源调度系统*,要注意两者是不一样的。
- 任务调度系统负责一个任务何时运行,何时结束以及正确的处理任务之间的依赖关系。流程的正确性是核心;
- 资源调度系统更关注系统物理资源的分配,例如CPU、内存等的使用。系统资源的最大化利用才是核心。
如上图,Presto用于快速查询,提供数据查询接口,hive用于离线批处理,Azkaban用于数据调度。
课程示例
主节点:node01
- Hive&Tez-node03,给主节点留出更多资源。
- mysql搭载在node02上是为了负载均衡,从node02上进行数据抽取。
- Sqoop-node03,不放在业务节点中,防止负载。
*Sqoop是连接关系型数据库和Hadoop的桥梁(导入和导出)。可以通过调整任务数来控制任务的并发度。
数据产品分类
(1)报表型:静态报表、DashBoard、即席查询
(2)多维分析型:OLAP等工具型
(3)定制服务型
(4)智能型:精准营销,将大数据的智能性融入产品、并与决策逻辑结合起来。
(5)使能型