数据仓库分层架构深度讲解

老克勒2023-02-01  29

         分层的主要原因是在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:

清晰数据结构:

         每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。

方便数据血缘追踪:

          简单来说,我们最终给业务呈现的是一个能直接使用业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。

减少重复开发:

          规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

把复杂问题简单化:

         将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤 ,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

屏蔽原始数据的异常:

         屏蔽业务的影响,不必改一次业务就需要重新接入数据

         数据分层每个企业根据自己的业务需求可以分成不同的层次,但是最基础的分层思想,理论上 数据分为三个层 , 数据运营层 、 数据仓库层 和 数据服务层 。基于这个基础分层之上添加新的层次,来满足不同的业务需求。

数据运营层(ODS)

         Operate data store(操作数据-存储),是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入ODS层 。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。例如:MySQL里面的一张表可以通过sqoop之间抽取到ODS层ODS层数据的来源方式:

数据仓库层(DW)

         Data warehouse(数据仓库) 。在这里, 从ODS层中获得的数据按照主题建立各种数据模型 。例如 以研究人的旅游消费为主题的数据集中 ,便可以结合航空公司的登机出行信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。在这里,我们需要了解四个概念:维(dimension)、事实(Fact)、指标(Index)和粒度( Granularity)。

数据服务层/应用层(ADS):         

Application Data Service(应用数据服务)。该层主要是提供数据产品和数据分析使用 的数据,一般会存放在ES、MySQL等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用。例如:我们经常说的报表数据,或者说那种大宽表,一般就放在这里。

ODS 数据准备层

功能:         

         ODS层是数据仓库准备区,为DWD层提供基础原始数据,可减少对业务系统的影响

建模方式及原则:     

        从业务系统增量抽取 、保留时间由业务需求决定、 可分表进行周期存储、数据不做清洗转换与业务系统数据模型保持一致 、按主题逻辑划分

DWD 数据明细层

功能:       

       为DW层提供来源明细数据,提供业务系统细节数据的长期沉淀 ,为未来分析类需求的扩展提供历史数据支撑

建模方式及原则:       

        数据模型 与ODS层一致,不做清洗转换处理 、为支持数据重跑 可额外增加数据 业务日期字段、可按年月日进行分表、用增量ODS层数据和前一天DWD相关表进行merge处理

DW(B/S) 数据汇总层

功能:         

       为DW、ST层提供细粒度数据,细化成DWB和DWS;       

        DWB是根据DWD明细数据进行转换 ,如维度转代理键、身份证清洗、会员注册来源清晰、字段合并、空值处理、脏数据处理、IP清晰转换、账号余额清洗、资金来源清洗等;      

         DWS是根据DWB层数据按各个维度ID进行高粒度汇总聚合 ,如按交易来源,交易类型进行汇合

建模方式及原则:

         聚合、汇总增加派生事实;

         关联其它主题的事实表,DW层可能会跨主题域;

         DWB保持低粒度汇总加工数据,DWS保持高粒度汇总数据;

         数据模型可能采用反范式设计,合并信息等。

Data Market (数据集市)层

功能:        

        可以是一些宽表,是根据DW层数据按照各种维度或多种维度组合把需要查询的一些事实字段进行汇总统计并作为单独的列进行存储 ;         

        满足一些特定查询、数据挖掘应用        

         应用集市数据存储

建模方式及原则:         

      尽量减少数据访问时计算 (优化检索)        

      维度建模,星型模型;         

      分表存储

ST 数据应用层(ADS层)

功能:        

        ST层面向用户应用和分析需求 ,包括前端报表、分析图表、KPI、仪表盘、OLAP、专题等分析, 面向最终结果用户          

     适合做OLAP、报表模型,如ROLAP,MOLAP

         根据DW层经过聚合汇总统计后的粗粒度事实表

建模方式及原则:         

         本篇文章主要讲解数仓项目中为什么分层,比如 我们在完成一个需要的需求的时候也许只需要一个复杂的SQL语句就可以完成。但一个复杂的SQL语句方便后面维护吗?当出现了问题方便追踪吗? 这时候就体现出分层的好处。顺便给大家分享阿里的数仓模型是什么样的。信自己,努力和汗水总会能得到回报的。我是大数据老哥,我们下期见~~~

云上数据仓库解决方案: https://www.aliyun.com/solution/datavexpo/datawarehouse

离线数仓架构

离线数仓特点

基于Serverless的云上数据仓库解决方案

架构特点

实时数仓架构

[图片上传失败...(image-ec3d9a-1629814266849)]

实时数仓架构特点

秒级延迟,实时构建数据仓库,架构简单,传统数仓平滑升级

架构特点

数据仓库的输入数据源和输出系统分别是什么?

输入系统:埋点产生的用户行为数据、JavaEE后台产生的业务数据、个别公司有爬虫数据。

输出系统:报表系统、用户画像系统、推荐系统

1)Apache:运维麻烦,组件间兼容性需要自己调研。(一般大厂使用,技术实力雄厚,有专业的运维人员)

2)CDH:国内使用最多的版本,但 CM不开源,但其实对中、小公司使用来说没有影响(建议使用)10000美金一个节点 CDP

3)HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少

服务器使用物理机还是云主机?

1)机器成本考虑:

(1)物理机:以128G内存,20核物理CPU,40线程,8THDD和2TSSD硬盘,单台报价4W出头,惠普品牌。一般物理机寿命5年左右。

(2)云主机,以阿里云为例,差不多相同配置,每年5W

2)运维成本考虑:

(1)物理机:需要有专业的运维人员(1万*13个月)、电费(商业用户)、安装空调

(2)云主机:很多运维工作都由阿里云已经完成,运维相对较轻松

3)企业选择

(1)金融有钱公司和阿里没有直接冲突的公司选择阿里云(上海)

(2)中小公司、为了融资上市,选择阿里云,拉倒融资后买物理机。

(3)有长期打算,资金比较足,选择物理机。

根据数据规模大家集群

属于 研发部 /技术部/数据部,我们属于 大数据组 ,其他还有后端项目组,前端组、测试组、UI组等。其他的还有产品部、运营部、人事部、财务部、行政部等。

大数据开发工程师=>大数据组组长=》项目经理=>部门经理=》技术总监

职级就分初级,中级,高级。晋升规则不一定,看公司效益和职位空缺。

京东:T1、T2应届生;T3 14k左右 T4 18K左右 T5 24k-28k左右

阿里:p5、p6、p7、p8

小型公司(3人左右):组长1人,剩余组员无明确分工,并且可能兼顾javaEE和前端。

中小型公司(3~6人左右):组长1人,离线2人左右,实时1人左右(离线一般多于实时),组长兼顾和javaEE、前端。

中型公司(5 10人左右):组长1人,离线3 5人左右(离线处理、数仓),实时2人左右,组长和技术大牛兼顾和javaEE、前端。

中大型公司(10 20人左右):组长1人,离线5 10人(离线处理、数仓),实时5人左右,JavaEE1人左右(负责对接JavaEE业务),前端1人(有或者没有人单独负责前端)。(发展比较良好的中大型公司可能大数据部门已经细化拆分,分成多个大数据组,分别负责不同业务)

上面只是参考配置,因为公司之间差异很大,例如ofo大数据部门只有5个人左右,因此根据所选公司规模确定一个合理范围,在面试前必须将这个人员配置考虑清楚,回答时要非常确定。

IOS多少人 安卓多少人 前端多少人 JavaEE多少人 测试多少人

(IOS、安卓) 1-2个人 前端1-3个人; JavaEE一般是大数据的1-1.5倍,测试:有的有,有的没有。1个左右。 产品经理1个、产品助理1-2个,运营1-3个

公司划分:

0-50 小公司

50-500 中等

500-1000 大公司

1000以上 大厂 领军的存在

转自: https://blog.csdn.net/msjhw_com/article/details/116003357

一直想整理一下这块内容,既然是漫谈,就想起什么说什么吧。我一直是在互联网行业,就以互联网行业来说。

先大概列一下互联网行业数据仓库、数据平台的用途:

整合公司所有业务数据,建立统一的数据中心;

提供各种报表,有给高层的,有给各个业务的;

为网站运营提供运营上的数据支持,就是通过数据,让运营及时了解网站和产品的运营效果;

为各个业务提供线上或线下的数据支持,成为公司统一的数据交换与提供平台;

分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果;比如广告定向精准投放、用户个性化推荐等;

开发数据产品,直接或间接为公司盈利;

建设开放数据平台,开放公司数据;

。。。。。。

上面列出的内容看上去和传统行业数据仓库用途差不多,并且都要求数据仓库/数据平台有很好的稳定性、可靠性;但在互联网行业,除了数据量大之外,越来越多的业务要求时效性,甚至很多是要求实时的 ,另外,互联网行业的业务变化非常快,不可能像传统行业一样,可以使用自顶向下的方法建立数据仓库,一劳永逸,它要求新的业务很快能融入数据仓库中来,老的下线的业务,能很方便的从现有的数据仓库中下线;

其实,互联网行业的数据仓库就是所谓的敏捷数据仓库,不但要求能快速的响应数据,也要求能快速的响应业务;

建设敏捷数据仓库,除了对架构技术上的要求之外,还有一个很重要的方面,就是数据建模,如果一上来就想着建立一套能兼容所有数据和业务的数据模型,那就又回到传统数据仓库的建设上了,很难满足对业务变化的快速响应。应对这种情况,一般是先将核心的持久化的业务进行深度建模(比如:基于网站日志建立的网站统计分析模型和用户浏览轨迹模型;基于公司核心用户数据建立的用户模型),其它的业务一般都采用维度+宽表的方式来建立数据模型。这块是后话。

整体架构下面的图是我们目前使用的数据平台架构图,其实大多公司应该都差不多:

请点击输入图片描述

请点击输入图片描述

逻辑上,一般都有数据采集层、数据存储与分析层、数据共享层、数据应用层。可能叫法有所不同,本质上的角色都大同小异。

我们从下往上看:

数据采集数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些简单的清洗。

数据源的种类比较多:

网站日志:

作为互联网行业,网站日志占的份额最大,网站日志存储在多台网站日志服务器上,

一般是在每台网站日志服务器上部署flume agent,实时的收集网站日志并存储到HDFS上;

业务数据库:

业务数据库的种类也是多种多样,有Mysql、Oracle、SqlServer等,这时候,我们迫切的需要一种能从各种数据库中将数据同步到HDFS上的工具,Sqoop是一种,但是Sqoop太过繁重,而且不管数据量大小,都需要启动MapReduce来执行,而且需要Hadoop集群的每台机器都能访问业务数据库;应对此场景,淘宝开源的DataX,是一个很好的解决方案(可参考文章 《异构数据源海量数据交换工具-Taobao DataX 下载和使用》),有资源的话,可以基于DataX之上做二次开发,就能非常好的解决,我们目前使用的DataHub也是。

当然,Flume通过配置与开发,也可以实时的从数据库中同步数据到HDFS。

来自于Ftp/Http的数据源:

有可能一些合作伙伴提供的数据,需要通过Ftp/Http等定时获取,DataX也可以满足该需求;

其他数据源:

比如一些手工录入的数据,只需要提供一个接口或小程序,即可完成;

数据存储与分析毋庸置疑,HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。

离线数据分析与计算,也就是对实时性要求不高的部分,在我看来,Hive还是首当其冲的选择,丰富的数据类型、内置函数;压缩比非常高的ORC文件存储格式;非常方便的SQL支持,使得Hive在基于结构化数据上的统计分析远远比MapReduce要高效的多,一句SQL可以完成的需求,开发MR可能需要上百行代码;

当然,使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算;Spark是这两年非常火的,经过实践,它的性能的确比MapReduce要好很多,而且和Hive、Yarn结合的越来越好,因此,必须支持使用Spark和SparkSQL来做分析和计算。因为已经有Hadoop Yarn,使用Spark其实是非常容易的,不用单独部署Spark集群,关于Spark On Yarn的相关文章,可参考:《Spark On Yarn系列文章》

实时计算部分,后面单独说。

数据共享这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库;

前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据; 和数据采集层到HDFS刚好相反,这里需要一个从HDFS将数据同步至其他目标数据源的工具,同样,DataX也可以满足。

另外,一些实时计算的结果数据可能由实时计算模块直接写入数据共享。

数据应用

业务产品

业务产品所使用的数据,已经存在于数据共享层,他们直接从数据共享层访问即可;

报表

同业务产品,报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层;

即席查询

即席查询的用户有很多,有可能是数据开发人员、网站和产品运营人员、数据分析人员、甚至是部门老大,他们都有即席查询数据的需求;

这种即席查询通常是现有的报表和数据共享层的数据并不能满足他们的需求,需要从数据存储层直接查询。

即席查询一般是通过SQL完成,最大的难度在于响应速度上,使用Hive有点慢,目前我的解决方案是SparkSQL,它的响应速度较Hive快很多,而且能很好的与Hive兼容。

当然,你也可以使用Impala,如果不在乎平台中再多一个框架的话。

OLAP

目前,很多的OLAP工具不能很好的支持从HDFS上直接获取数据,都是通过将需要的数据同步到关系型数据库中做OLAP,但如果数据量巨大的话,关系型数据库显然不行;

这时候,需要做相应的开发,从HDFS或者HBase中获取数据,完成OLAP的功能;

比如:根据用户在界面上选择的不定的维度和指标,通过开发接口,从HBase中获取数据来展示。

其它数据接口

这种接口有通用的,有定制的。比如:一个从Redis中获取用户属性的接口是通用的,所有的业务都可以调用这个接口来获取用户属性。

实时计算现在业务对数据仓库实时性的需求越来越多,比如:实时的了解网站的整体流量;实时的获取一个广告的曝光和点击;在海量数据下,依靠传统数据库和传统实现方法基本完成不了,需要的是一种分布式的、高吞吐量的、延时低的、高可靠的实时计算框架;Storm在这块是比较成熟了,但我选择Spark Streaming,原因很简单,不想多引入一个框架到平台中,另外,Spark Streaming比Storm延时性高那么一点点,那对于我们的需要可以忽略。

 我们目前使用Spark Streaming实现了实时的网站流量统计、实时的广告效果统计两块功能。

做法也很简单,由Flume在前端日志服务器上收集网站日志和广告日志,实时的发送给Spark Streaming,由Spark Streaming完成统计,将数据存储至Redis,业务通过访问Redis实时获取。

任务调度与监控在数据仓库/数据平台中,有各种各样非常多的程序和任务,比如:数据采集任务、数据同步任务、数据分析任务等;

这些任务除了定时调度,还存在非常复杂的任务依赖关系,比如:数据分析任务必须等相应的数据采集任务完成后才能开始;数据同步任务需要等数据分析任务完成后才能开始; 这就需要一个非常完善的任务调度与监控系统,它作为数据仓库/数据平台的中枢,负责调度和监控所有任务的分配与运行。

前面有写过文章,《大数据平台中的任务调度与监控》,这里不再累赘。

总结在我看来架构并不是技术越多越新越好,而是在可以满足需求的情况下,越简单越稳定越好。目前在我们的数据平台中,开发更多的是关注业务,而不是技术,他们把业务和需求搞清楚了,基本上只需要做简单的SQL开发,然后配置到调度系统就可以了,如果任务异常,会收到告警。这样,可以使更多的资源专注于业务之上。


转载请注明原文地址:https://juke.outofmemory.cn/read/2862553.html

最新回复(0)