数据仓库学习

数据仓库 Data Warehouse, DW

面向主题的、集成的、非易失的且随时间变化的数据集合。主要用于组织积累的历史数据,并使用分析方法(OLAP、数据分析)进行分析整理。

数仓诞生原因

(1)历史数据积存:使用频率低,数据挤压导致性能下降

(2)企业数据分析需要:防止各部门抽取数据不一致,通过数仓每天/每时定期抽取数据,使企业中取得的数据具有统一性。数仓可直接调用API接口,对各个部门访问权限可控。

大数据处理流程

(1)数据抽取:数据采集、数据清洗
(2)数据存储:数据清洗、数据仓库、数据后台
(3)数据提取:数据处理、数据建模、数据可视化

(一)数据抽取

对数据进行【可批处理】/【需实时处理】的分类,需要结合业务考虑,因为实时处理要求高,而批处理便宜。集群资源是有限的,需要合理利用计算资源。


数据抽取.png
(二)数据存储
(1)数据处理

1.数据的前后一致:比如数据名称

2.数据的通用性:比如日期排列格式

3.数据的存储

4.考虑数据仓库的易用性

5.数据的安全性:不泄漏/不丢失/安全性

(2)数据分层存储
数据存储是分层架构的,架构模式与数据拉取方式和方便对数据进行处理两方面考虑,一般是三层数据仓库:
数据分层存储.png

①贴源层ODS

②历史存储层MID

③数据模型层DM

(三)数据库提取

将多份数据查出来,互相关联合并,生成一张新的表单。

数据仓库的技术实现

传统数据仓库

有关系型数据库组成MPP(大规模并行处理)集群,比如mysql等。单机数据库。

大规模并行处理:将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。一般用中间件充当负载均衡等能力。

缺点
  1. 拓展性有限,数据交换需要高速网络来支撑
  2. 热点问题,只能通过数据加盐(给数据加个随机前缀,随机查询)的操作来解决
数据库的中间件
  1. 分库分表
  2. 读写分离
大数据数据仓库

分布式文件系统,默认会对数据进行备份

缺点
  1. 缺少事物支持(?啥意思)
  2. 任务少时计算较慢
  • MPP架构
  1. 扩展性较差

  2. 优先考虑C(一致性)、A(可用性)、P(分区容错性)

  • 大数据架构(hadoop架构)
  1. 数据共享,不会出现单点挂了的现象,但数据吞吐量大,
  2. 优先考虑的是P(分区容错性)、A(可用性)、C(一致性)
  3. 也非常适合处理非结构化,半结构化数据

架构

  • 数据应用层 ADS

    • 报表决策
    • 并发查询
    • 搜索检索
  • 公共维度模型层 CDM

    • 数据汇总层DWS
    • 数据明细层DWD
  • 操作数据源层 ODS

    • 原始数据
  • 数据清洗层ETL

    • Sqoop
    • Kattle
    • Other
  • 数据表

架构.png

一般ETL流程数据积存(ODS层) ,数据分析在DWD、DWS、ADS层。

数据应用层 ADS

也被称为数据集市。以报表的形式提供给业务系统进行展示,为外部世界提供访问接口。

公共维度模型层 CDM

(1)数据汇总层DWS

对各个明细表进行一个汇总,按照分析主题融合成一张宽表。模型并非3NF,更注重的是数据聚合、复杂查询、处理性能更优的数仓模型,如维度模型等。数据仓库的模型设计出现在本层。

(2)数据明细层DWD

数据明细层对ODS层的数据进行清洗、标准化、维度退化(时间、分类、地域)。模型仍是3NF模型

操作数据源层 ODS

与原始数据保存一致,不允许修改,原始数据的扩充集,如更新类型等(插入、更新)。

数据清洗层ETL(Extraction Transformation Loading)

数据仓库通过ETL实现定期从数据表中同步数据(数据抽取)

数据抽取Extraction

抽取的数据源可分为结构化、半结构化、非结构化数据。

结构化数据一般采用JDBC(JAVA数据库连接)、数据库日志方式;非/半结构化数据监听文件变动。

抽取方式:

  1. 全量同步:一般用于初始化数据装载
  2. 增量同步:检测数据的变动,抽取发生变动的数据,一般用于数据更新

ETL的规则设计占整个数据仓库搭建量的60%~80%。

数据转化 Transformation

主要针对非/半结构化数据

数据加载Loading

将处理完的数据导入对应的目标源里。

常见的ETL工具

  • 结构化数据:Sqoop、Kettle、Datastage、Information、Kafka(消息队列)

  • 非/半结构化数据:Flume、Logstash(Elastic家族产品)

建模

OLTP( on-line transaction processing,翻译为联机事务处理,主要是数据库- 增删改,日常操作)

OLTP和OLAP.png

两者介绍

OLTP:记录业务事件的发生,以增删改的方式在数据库中进行数据的更新处理操作。常见的业务系统如ERP,CRM,OA等。
OLAP:当数据积累到一定程度的时候,对过去一段时间内的数据拿出来做统计分析,就是OLAP。

可以说OLTP是数据库的应用,OLAP是数据仓库的应用。

OLTP和OLAP.png

OLAP又分为ROLAP(关系型联机分析处理)MOLAP(多维联机分析处理)

建模方法
OLTP(在线事务处理)

主要操作是随机读写。为保证数据一致性,常采用的关系模型,使用三范式(3NF)来减少冗余。

OLTP.png
OLAP(在线联机分析)

更关注于分析数据,关注数据整合。

根据数据存储方式不同,又分为ROLAP、MOLAP、HOLAP。

  • ROLAP (relation OLAP,关系型OLAP):使用关系模型构建,存储系统一般为RDBMS(关系数据库管理系统)。
  • MOLAP(Multidimensional OLAP,多维型OLAP):预先聚合计算,使用多维数组的形式保存数据结果,加快查询分析时间。不存明细数据(表数据),只存结果。
  • HOLAP(Hybrid OLAP,混合架构的OLAP):ROLAP和MOLAP两者的集成;如低层是关系型的,高层是多维矩阵型的;查询效率高于ROLAP,低于MOLAP。
ROLAP建模方法

一般采用维度模型建模方法(维度:对事物进行组织、分类)。

image-20210628092416583.png

维度模型:分为星型模型雪花模型星座模型

1、星型模型

维度只有一层,分析性能最优。

image-20210628092703971.png

2、雪花模型

多层维度,较为灵活,但性能较差。

image-20210629082029259.png

3、星座模型

基于多个事实表,事实表之间会共享一些维度表。

业务增长的情况下形成的,是公司中最常见的。

*宽表模型

维度模型的衍生。


image-20210629082234301.png
MOLAP建模方法

MOLAP将数据进行预结算,并将聚合结果存储到CUBE模型中

CUBE模型以多维数组的形式,物化到存储系统中,加快后续的查询

生成CUBE需要大量的时间、空间,维度预处理可能会导致数据膨胀。

image-20210629082758123.png

常见的MOLAP产品:Kylin、Durid

OLAP多维分析

OLAP主要操作是复杂查询,可以多表关联,使用COUNT等聚合函数。

OLAP对复杂查询操作做了直观定义,包括钻取、切片、切块、旋转:

image-20210629083225483.png

实践理论

表类型
  • 事实表

    存储显示存在的业务对象。

  • 维度表

    对应的业务状态,方便对数据进行统计、聚合等计算。

  • 事实事物表

    随着业务产生数据,产生后不会修改。

  • 周期快照事实表

    随着业务周期的推进而变化,如年、季度累积。是周期+状态度量的组合,如年累积订单数(年-周期,订单总数-量度)。

  • 累积快照事实表

    记录不确定周期的度量统计,完全覆盖一个事实的生命周期,如订单状态表。只有一条记录,多个时间字段。

    *因为可修改,实现难度较大。

累积快照事实表实现

(1)日期分区表,全量数据记录,每天的分区存储昨天全量数据与当天增量数据合并的结果。但数据量大将导致全量表膨胀,存储永远不更新的冷数据,对性能影响较大。*仅适用于数据量少的情况。

(2)日期分区表,推测数据最长生命周期,存储周期内的数据;周期外的冷数据存储到归档表。需要保留多天的分区数据,存储消耗依然很大。

(3)日期分区表,以业务实体的结束时间分区,每天的分区存放当天结束的数据。另外设计一个时间非常大的分区,存放截止当前未结束的数据。有点:数据无冗余。

*拉链表

记录每条信息的生命周期,保留数据的所有变更状态。表数据的随机修改方式是增序追加。

image-20210629204151937.png
ETL策略
  • 全量同步
  • 增量同步
任务调度

主要为了解决任务单元间的依赖关系和自动化完成任务的定时执行。

image-20210629204852746.png

常见的任务类型有Shell,Java程序,Mapreduce程序、SQL脚本。

常见的调度工具:Azkaban、Oozie

除了任务调度系统,还有一个资源调度系统*,要注意两者是不一样的。

  • 任务调度系统负责一个任务何时运行,何时结束以及正确的处理任务之间的依赖关系。流程的正确性是核心;
  • 资源调度系统更关注系统物理资源的分配,例如CPU、内存等的使用。系统资源的最大化利用才是核心。

如上图,Presto用于快速查询,提供数据查询接口,hive用于离线批处理,Azkaban用于数据调度。

image-20210629205740823.png

课程示例


image-20210629212108900.png

主节点:node01

  • Hive&Tez-node03,给主节点留出更多资源。
  • mysql搭载在node02上是为了负载均衡,从node02上进行数据抽取。
  • Sqoop-node03,不放在业务节点中,防止负载。

*Sqoop是连接关系型数据库和Hadoop的桥梁(导入和导出)。可以通过调整任务数来控制任务的并发度。

image-20210629213010668.png
数据产品分类

(1)报表型:静态报表、DashBoard、即席查询

(2)多维分析型:OLAP等工具型

(3)定制服务型

(4)智能型:精准营销,将大数据的智能性融入产品、并与决策逻辑结合起来。

(5)使能型

你可能感兴趣的:(数据仓库学习)