上一篇我们介绍了数据集市的概念以及它和数仓的区别,并且重点论述了大数据数仓中的分层架构体系。这篇我们简要分析一下以下5家公司的数仓分层架构模型:2、阿里云MaxCompute配合DataWorks通过分析论述希望对我们设计和构建数仓分层模型,能有所借鉴或启迪。
注:图片来自https://cloud.tencent.com/developer/user/6157706
根据上图,我们可以看到:马蜂窝数据仓库遵循标准的大三层五小层架构(ODS + DW (DWD、DWS、DIM)+ ADS),对数据分层的定位主要采取维度模型设计,不会对数据进行抽象打散处理,更多注重业务过程数据整合。共分为 3 层:业务数据层、公共数据层与应用数据层,每层定位、目标以及建设原则各不相同。
包含 STG(数据缓冲层)与 ODS(操作数据层)两层,这两层数据结构与业务数据几乎一致。
STG
也叫数据缓冲层,可以理解为数据准备区。
- 操作数据层定位于业务明细数据保留区,负责保留数据接入时点后历史变更数据,数据原则上全量保留。
- 模型设计依据业务表数据变更特性采取拉链、流水表两种形式。
细分为 DWD(明细数据层)、DWS(汇总数据层)、DIM(公共维度层) 三层,主要用于加工存放整合后的明细业务过程数据,以及经过轻度或重度汇总粒度公共维度指标数据。
公共数据层作为仓库核心层,定位于业务视角,提炼出对数据仓库具有共性的数据访问、统计需求,从而构建面向支持应用、提供共享数据访问服务的公共数据。这一层是整合后的业务过程明细数据,负责各业务场景垂直与水平数据整合、常用公共维度冗余加工,以及明细业务标签信息加工;汇总数据层按照主题对共性维度指标数据进行轻度、高度聚合。
其实这层通常的叫ADS层,这层主要用于各产品或各业务条线个性化的数据加工,例如商业化产品数据、搜索推荐,风控等。
在分析阿里云数据模型设计之前,我们先来官网看一下阿里云大数据产品MaxCompute配合DataWorks,完整的技术架构图。
https://help.aliyun.com/document_detail/114444.html?spm=a2c4g.11174283.6.622.3b544c07CyForn
一、MaxCompute配合DataWorks技术架构
DataWorks的数据集成负责完成数据的采集和基本的ETL。MaxCompute作为整个大数据开发过程中的离线计算引擎。则包括数据开发、数据质量、数据安全、数据管理等在内的一系列功能。我们再来看数仓分层架构设计,和马蜂窝公司类似,将数据仓库分为大三层五小层,自下而上为:数据引入层(ODS)、数据公共层(CDM,Common Data Model分为DWD、DWS、DIM)和数据应用层(ADS)。
存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。- 主要完成基础数据引入到MaxCompute的职责;
又称“通用数据模型层”,包括DIM维度表、DWD和DWS,由ODS层数据加工而成。基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。- 构建命名规范、口径一致的统计指标,为上层提供公共指标,
- 公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数
业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。- 可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。
存放数据产品个性化的统计指标数据。根据CDM与ODS层加工生成。该数据分类架构在ODS层分为三部分:数据准备区、离线数据和准实时数据区。从交易数据系统的数据经过DataWorks数据集成,同步到数据仓库的ODS层。经过数据开发形成事实宽表后,再以商品、地域等为维度进行公共汇总。
整体的数据流向如下图所示。其中,ODS层到DIM层的ETL(萃取(Extract)、转置(Transform)及加载(Load))处理是在MaxCompute中进行的,处理完成后会同步到所有存储系统。ODS层和DWD层会放在数据中间件中,供下游订阅使用。而DWS层和ADS层的数据通常会落地到在线存储系统中,下游通过接口调用的形式使用。
我们将会从传统数仓、实时数仓、准实时数仓的数仓演进过程来分析:
https://mp.weixin.qq.com/s?__biz=MzU3Mzg4OTMyNQ==&mid=2247485571&idx=1&sn=fcce8640538e3e5bf12f61722f2e247a&chksm=fd3b86c1ca4c0fd782fecc046c37e78d6a12851de89867c56b753577e9bad2646085f2989011&scene=21#wechat_redirect
如上图所示:传统数仓模型也是分为了三大层五小层:ODS、DWD、DWS、DIM和应用层ADS。即席查询这里主要通过 Presto、Hive 和 Spark 来实现。即席查询的概念和技术我们后面会讲。
2、实时数仓模型
我们之前讨论的数仓都是离线数仓也叫做传统数仓模型,美团的这个实时数仓架构我们讨论的是实时数仓,这里不懂实时数仓的小伙伴,只要字面意思理解“实时”就行。后面我们会讲实时数仓技术。其实呢,实时数仓的模型也是要遵守传统数据仓库模型,美团在实时数仓模型也是三大层五小层:ODS 、DWD、 DWS、DIM和ADS层。
比如:DWD明细层和DWS汇总层的数据一般会放在 Kafka 上,维度数据一般考虑到性能问题则会放在 HBase 或者 Tair 等 KV 存储上,即席查询则可以使用 Flink 完成。
除了在以上两种数仓模型之外,还有一种准实时数仓模型,其特点是不完全基于流去做,而是将DWD明细层和DWS汇总层数据导入到 OLAP 存储中,基于 OLAP 的计算能力去做汇总并进行进一步的加工,这里OLAP使用kylin。
分层方式方面
离线数仓
为了考虑到效率问题,一般会采取空间换时间的方式,层级划分会比较多;
实时数仓
考虑到实时性问题,一般分层会比较少,另外也减少了中间流程出错的可能性。
数据存储方面
离线数仓:会基于 HDFS;
实时数仓:会基于消息队列(如 Kafka)。
维度数据存储方面
离线数仓:一般存储在Hive上
实时数仓:将数据放在 KV 存储上面。
数据加工过程方面
离线数仓:一般以 Hive、Spark 等批处理为主,
实时数仓:则是基于实时计算引擎如 Spark Stream、Flink 等,以流处理为主。
https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247487029&idx=1&sn=94d00c261cca0c42ca2c0f2564f32e50&chksm=fbd4bc59cca3354f0d3e313f5a770ec3c5b19a3505ea7da13ae5aa5b5a02c1bf965e9ed0dc25&scene=21#wechat_redirect网易的数仓分层架构,主要参考了离线数仓的设计方案,也参考了业界同行的一些做法。将数据分为四个层次:
1、ODS层
通过数据采集工具收集各个业务源数据,这里主要使用Kafka做数据存储。
2、DWD层
明细数据层是按主题域来划分,通过维度建模方式来组织各个业务过程的明细数据。这里使用Kafka做数据存储,在DWD层会关联一些历史明细数据,会将其放到Redis里面,Key-Value对形式。
3、DIM层
中间会有一个DIM层,维度数据层主要做些高并发维度一些查询和关联的操作。一般将其存放在HBase里面。
4、DM层
最上层是DM层,通过DWD层数据做一些指标加工,主要面向一些分析和应用汇总的指标或者是做多维分析的明细数据。
这里需要综合考虑对于数据落地的要求以及具体的查询引擎来选择不同的存储方式。
对于常见的指标汇总模型直接放在MySQL里面;
维度比较多的、写入更新比较大的模型会放在HBase里面,
明细数据需要做一些多维分析或者关联会将其存储在Greenplum里面;
还有一种是维度比较多、需要做排序、查询要求比较高的,如活动期间用户的销售列表等大列表直接存储在Redis里面。
这里简单说一下Flink作为实时的计算引擎,不同的数据层(ods->dwd->dm)之间,不同的存储引擎(kafka->db)都是通过Flink job串联的,相关的etl和关联、聚合等操作也是在Flink中完成。
前面4个都是互联网公司的数仓架构方法,下面我们看一下传统银行业数仓分层架构体系。
注:图片信息来源于腾旭云
https://cloud.tencent.com/developer/article/1106805
数据源包括:结构化和非结构化数据,包括日志系统、业务系统、第三方业务接入等等;文件的交换中枢,含源系统结构化数据和半结构化、非结构化数据(主要是外部数据)。结构化数据接入,在线数据平台的源数据历史层HDM、基础数据模型层的数据来源。类似ODS层数据的STG层:数据缓冲层,存原始数据;源数据按数据仓库模型加工后存储,源数据缓存区数据接入,公共数据模型层CDM的主要数据来源。仅大数据平台各数据层数据存储和内部流转用。聚焦客户营销和风险管理等业务领域公共需求的银行信息资产加工和存储,源数据缓存区、基础数据模型层数据接入,数据服务接口的主要数据来源。在线数据平台的对外数据服务接口,源数据历史层、公共数据模型层数据接入,BI应用集市的数据来源。历史数据平台的对外数据服务接口,源数据历史层、公共数据模型层数据接入,各类查询应用的数据来源。
包括银监标准化EAST应用在内的综合监管集市,数据服务接口的数据接入,综合监管应用的数据来源。
BI统计分析类应用所在的数据集市,公共数据汇总层ADM的加工和存储,数据服务接口的数据接入。