大数据中台架构以及建设全流程二(Daas层设计)

目录

背景

面临问题                                解决方案

数仓架构演进

离线数仓架构

案例

 Lambda数仓架构

案例

问题点 

Kappa数仓架构

架构选型

数仓整体架构(图片来自网络)​

数仓分层架构(图片来自网络)

 主题域划分

维度建模

需求标准化

 维度及指标规范管理

指标管理流程图

数仓建库表规范

字段规范

实时数仓

实时数仓1.0

​缺点:

实时数仓2.0

实时数仓3.0

数据地图

血缘关系

数据湖

离线数仓痛点

实时数仓痛点

数据湖vs数仓

写实模式和读诗时模式

基于数据湖数仓架构

数据湖的未来

 数据湖技术选型


背景

1:数据存在孤岛,烟囱式开发。导致指标混乱,重复开发,数据冗余。

2:数据分布在不同数据库或者所有都杂在一起,层次不清晰。

3:数据没有沉淀,很多时候重复计算导致数据冗余

4:定义不规范,没有统一规范。

这个时候数仓就应运而生。

面临问题                                解决方案

表命名逻辑不清晰                                        逻辑分层(约定表名)

数据孤岛,烟囱式开发                                 维度建模(主题域划分,沉淀中间结果)

找表难                                                           数据地图(查看表,元数据,数据血缘关系)

指标定义混乱,存在重复                              指标字典(命名规范管理,统一口径规则)                 DB表全量同步,效率低下                            增量表(设计拉链表,订阅Binlog日志) 

各部门自建数仓                                             共享数仓(共享DW层,自建DM层)

数仓架构演进

经典数仓架构----------------------->1990年提出的数仓概念

随着数据量急速增多演变如下

离线大数据架构-------------------->互联网时代数据量爆炸,且诞生了很多大数据工具

随着实时需求的增加演变如下

lambda架构------------------------->在原有功能上增加了实时的功能

因为业务需求以及希技术栈统一演变如下

kappa架构---------------------------->流批一体,业务核心转向实时

离线数仓架构

核心就是通过离线方式将数据导入数仓中。数据处理方式常用的就是MR,HSql,SparkSql以及一些集成组件比如DataX,kettle,Sqoop等。

案例

 Lambda数仓架构

案例

问题点 

        1:同样的需求开发维护两套代码逻辑,批和流两套逻辑代码都 需要开发和维护,并且需要维护合并的逻辑,需同时上线。

        2:资源浪费,同样的计算逻辑计算两次,整体资源占用会增多。

        3:数据具有二义性:两套计算逻辑,实时数据和批量数据容易对不上。准确性难以分辨,且不好排查。

Kappa数仓架构

        Lambda架构解决了实时性的问题,随着业务的发展,很多业务都以实时性为主,再加上Flink等引擎的成熟,为了解决Lamdba架构的问题,提出了Kappa架构。
Lambda vs Kappa

架构选型

 实际上大部分公司还是会采用Lambda架构,并不是很多任务需要很实时,而且有些财力人力不支持。

数仓整体架构(图片来自网络)

数仓分层架构(图片来自网络)

1、ods:操作数据层(Operational Data Store),脏数据清理,加密数据等,全量数据存储。
2、dwd:明细数据层(Data Warehouse Detail),维度合并实时表,提高明细表易用性。稳定的维度可以选择退化,异变的选择不退化。或者只保留维度组件采用星型模型。
3、dwm:中间层层(Data Warehouse Middle),可有可无,根据实际情况创建。存储中间过程数据。
4、dws:汇总数据层(Data Warehouse Summary),数据大宽,构建公共指标体系。
5、ads:应用数据层(Application Data Store)个性化产品指标数据
6、dim,维度数据层

 主题域划分

可以按照如下方式划分2主题域

负责人:xxx           时间:2021-xx-xx          xx     xx

                                                  业务主题

数据主题

全平台中台表单小程序App...
张三交易新增卖家
新增买家
交易额
李四用户注册用户
活跃用户
王五产品设备
物料
备件

维度建模

strep1:数据调研,需求分析(确定业务模块,数据域。比如用户域,产品域,交易域)

strep2:构建维度*事实总线矩阵(明确业务过程(业务总做,比如点检,保养,开关机,商品场景下的下单,支付等),业务过程与维度之间关系)

step3:维度*事实模型设计(构建dw事实明细表,DM主题明细)

step4:明确统计指标

        原子指标=业务过程+度量 比如登陆人数,支付订单数,执行开关机操作人数

        派生指标=时间周期+修饰词+原子指标,比如最近七天全平台登陆人数,最近一天执行开关机操作人数。最近一个月App端登陆人数

step5:Ads层指标结果表设计,一般在关系型数据库或者Nosql数据库等查询比较快的DB

维度总线矩阵构建方式如下

负责人:xxx           时间:2021-xx-xx          xx     xx一致性维度
                维度
数据域*业务过程
省市区销售渠道性别行业分类...
张三设备开关机
点检
保养
李四用户注册用户
活跃用户
王五产品设备
物料
备件

需求标准化

标准化流程

 维度及指标规范管理

派生指标=时间周期+修饰词+原子指标

举个栗子:过去一个月App端登录用户数 = 过去一个月(时间周期)+App端+登陆人数

日期周期:派生指标的日期聚合粒度;如:当天,过去7天,过去30天,其中以「当天」最为普遍
修饰词:用于对原子指标的修饰,包含对业务的修饰、场景修饰等;如:阿里、手机、回收都属于
修饰词
原子指标:指标的最细颗粒度描述,规则为:业务动作+度量值;如:支付+订单数=支付订单数

指标管理流程图

数仓建库表规范

        如果数据量非常大,每一层表很多。则根据数仓分层建库,比如dw_公司名_dim,dw_公司名_dwd,dw_公司名_ods。每一层一个库。

        如果表并不多,其实也可以把所有层的放到一个库里面。根据表明区别层级。

业务规范数据模型层次数据库名字含义物理表命名规范数据存储格式样例
业务数据ODSdw_xxx_ods数据贴源层,数据从各业务数据库来。
保持不变
ods_数据源_更新方式_时间粒度Textods_mysql_inc_1d/ods_mysql_full_1d
数据仓库DWDdw_xxx_dwd经过etl后的基础事实明细表dwd_数据源_业务过程_更新方式_时间粒度
如果是多数据源聚合而得
dwd_业务过程_更新方式_时间粒度
Parquet+snappydwd_msql_login_inc_1d
DWMdw_xxx_dwm根据业务主题分析的中间过程表dwm_业务主题_更新方式_时间粒度
DIMdw_xxx_dim维度字典dim_维度类型_更新方式_时间粒度Textdim_city_full_1d
数据集市DWSdw_xxx_dws按数据/主题专题进行分析的轻度汇总数据dws_业务主题域_业务过程_更新方式_时间粒度Parquet+snappydws_eqp_check_full_1d(设备主题,维修过程)
数据产品ADSdw_xxx_ads数仓提供给业务方使用的数据,可直接同步dws层也可以再通过dws聚合而来ads_业务主题域/数据主题域_业务过程_更新方式_时间粒度Text/Parquetads_运营数据分析_full_30d

字段规范

实时数仓

实时数仓1.0

缺点:

        1:Kafka无法支持海量数据存储

        2:Kafka无法支持Olap查询

        3:Kafka无法像离线数据那样维护血缘关系

        4:Kafka无法支持数据更新删除

实时数仓2.0

 数据实时跟离线各走各只是数据全部统一落地到数据湖(常用技术栈比如Hudi)中,一次性解决了1.0的所有缺点。还能自动合并小文件节省存储空间。

实时数仓3.0

3.0跟20其实就是统一了技术栈,流批一体,使用flink或者sparkstreaming都可以。

好处是Sql统一,技术栈统一。

数据地图

在进行大数据治理时候,当然希望能够通过筛选,查询得到数据表的分类,建表语句,字段类型,血缘关系详细信息等。要做这么一个管理界面,其实是从建表源头时候就要控制通过页面建表,能够获取表的所有基础信息以及字段信息。

血缘关系

使用开源组件atlas来做,介绍文章如下

数据治理之元数据管理的利器——Atlas入门宝典 - 独孤风 - 博客园 (cnblogs.com)

如果想要自研也可以,其实做血缘其实就是知道表与表之间关系,是如何转化得来的。核心其实就是拦截解析任务sql进行解析,但是挺麻烦,有开源的为什么不用开源的呢。

数据湖

前面不论离线数仓还是实时数仓,都存在一些问题。

1:技术栈不统一:

2:想要纯实时就数据无法更新修改,且无法存储大量数据:

3:不支持非结构化数据,依赖etl过程处理成结构化。(实际上有些数据当时并不知道该怎么用,只是想留存下来以后使用)比如日志,音频,图片。

离线数仓痛点

1:字段变更后,历史数据涉及到重跑覆盖。利用数据湖的读诗时模式可以解决

2:lambda架构数仓merge成本太高需使用额外uperset存储,不同存储之间涉及数据打通

3:实时分支里面,kafka无法保留海量数据,基于历史数据分析不好做。

实时数仓痛点

数仓方案1.0

 痛点:没有模型,数据不能复用,浪费资源

数仓2.0

优点:数据模型可复用,整体延迟低。

痛点:kafka无法存储海量数据,默认存储7天,且无法基于中间层模型进行分析。 

数据湖vs数仓

数据湖

1:数据价值无需提前明确

2:数据存储之后才需要定义schema

3:存储原始数据,可存储结构化,半结构化数据

4:低成本开销获得容量扩展

5:敏捷简单数据集成,支持编程框架

6:灵活构建,成本低,可复用资产

数仓

1:数据价值必须提前明确

2:数据存储之前必须定义好schema

3:只存储清洗后数据,结构化数据

4:中等成本开销能获得较大容量扩展

5:仅能支持统计,报表以及传统bi

6:重量级构建,时间成本高。

写实模式和读诗时模式

写时模式----------------->数据在写入前需定义好Schema,数据都按照schema写入。

读时模式----------------->数据在写入时候不需要定义schema,在需要时候再定义schema使用。有点类似dataframe

所以数据湖可以无成本修改schema,同一套数据不同的schema。

基于数据湖数仓架构

数据湖的未来

事务支持
企业内部许多数据管道通常会并发读写数据。对ACID事务的支持确保了多方并发读写数据时的一致性问题
•Schema enforcement and governance(模式实施和治理)
未来能更好的管理元数据,schema管理和治理,不让数据湖变成沼泽地
•BI支持
Lakehouse可以直接在源数据上使用BI工具
•开放性
使用的存储格式是开放式和标准化的(如parquet),并且为各类工具和引擎,包括机器学习和Python/R库,提供API,
以便它们可以直接有效地访问数据
•支持从非结构化数据到结构化数据的多种数据类型
•支持多种工作负载
包括数据科学、机器学习以及SQL和分析
•端到端流
为了构建Lake house,需要一个增量数据处理框架,例如Apache Hudi。

 数据湖技术选型

市面上目前常规的有三个数据湖技术组件

 开源产品对比

 产品热度

 一般来说Hudi比较流行。

使用案例

使用Apache Spark和Apache Hudi构建分析数据湖 - 知乎

数据查询平台

        当我们有了数仓,以及在开发和使用数仓过程中我们需要对数据进行查询,校验,使用。总不能每次都打开shell界面进去查询,这样不便于权限管理以及展示。

        所以我们需要一个平台提供给各部门使用,能够查看HDFS文件,sql查询数仓,Hive元数据查询。

目前市面上常用的组件有Hue

gethue.com(测试页面)

界面如下

 该组件基本满足日常需求,且功能很丰富满足大部分公司使用。

但是也有一些缺点

1:没有汉化版本

2:功能过多,使用成本高

3:HDFS不支持中文

4:HDFS个别压缩文件格式不支持浏览

5:HDFS查询不支持高可用

6:HiveSql不支持高可用

7:SparkSql不支持高可用

8:Hive和sparkSql元数据未打通

需要基于Hue进行二次开发

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值