数据仓库DW-理论知识储备

数据仓库DW

数据仓库具备 采集数据、分析数据、存储数据的功能,最后得出一些有用的数据,一些目标数据来使用。

采集来自不同源的数据,然后对这些数据进行分析和计算得出一些有用的指标,提供数据决策支持。

数据的来源有:系统的业务数据、用户的行为数据、爬虫数据等。

数据仓库包含:实时数据仓库、离线数据仓库。

数仓分层

数据仓库中的数据一般经过一下几层处理:参考来自

1.ODS

ODS主要完成:

(1)保持数据原貌不做任何修改,保留历史数据,储存起到备份数据作用,采集过来是什么数据就存储什么数据;

(2)数据一般采用lzo、Snappy、parquet等压缩格式;

(3)创建分区表,防止后续的全表扫描,减少集群资源访问数仓的压力,一般按天存储在数仓中。

2.DWD

DWD主要完成:

  1. 数据清洗

(1)去除空值、脏数据、超过极限范围的数据。

(2)过滤核心字段无意义的数据,比如订单表中订单 id 为 null,支付表中支付 id 为空

(3)将用户行为宽表和业务表进行数据一致性处理

清洗的手段包括Sql、mr、rdd、kettle、Python等等。清洗掉数据不能太多也不能很少。合理范围:1 万条数据清洗掉 1 条。

  1. 脱敏

对手机号(181****7089)、身份证号等敏感数据脱敏

  1. 维度退化

对业务数据传过来的表进行维度退化和降维。(商品一级二级三级、省市县、年月日)

  1. 压缩

LZO,列式存储 parquet

3.DWS

以DWD为基础,进行轻度的汇总。预聚合。

DWS层就是关于各个主题的加工和使用,这层是宽表聚合值,是各个事实表的聚合值。这里做轻度的汇总会让以后的计算更加的高效,如:统计各个主题对象计算7天、30天、90天的行为, 应对特殊需求(例如,购买行为,统计商品复购率)会快很多不必走ODS层反复拿数据做加工。

这层会把每个用户单日的行为聚合起来组成一张多列宽表,以便之后关联用户维度信息后进行,不同角度的统计分析。

涉及的主题包括:访客主题、用户主题、商品主题、优惠券主题、活动主题、地区主题等

4.DWT

这层涉及的主题和DWS层一样包括:访客主题、用户主题、商品主题、优惠券主题、活动主题、地区主题等。只不过DWS层的粒度是对当日用户汇总信息,而DWT层是对截止到当日、或者近7日、近30日等的汇总信息。

以用户主题这个来举列:

*DWS层:用户主题层是记录某一个用户在某一天的汇总行为。

*DWT层:用户主题层是记录某一个用户截止在当日的汇总行为。

5.ADS

统计指标。

ADS层数据是专门给业务使用的数据层,这层是面向业务定制的应用数据层。

ADS主要完成:

(1)提供为数据产品使用的结果数据、指标等。

(2)提供给数据产品和数据分析使用的数据,一般会存放在 ES、MySQL等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。如报表数据,或者说那种大宽表。

这个项目中ADS层也是包含有多个主题:设备主题、会员主题、商品主题、营销主题、地区主题、访客主题、用户主题、订单主题、优惠券主题、活动主题等等。每个主题都包含多个指标的计算。

离线数仓

通常是批处理数据,一般一天处理一次,所以是批处理数据量大,处理时间长

离线数仓架构参考图

业务数据存储在MySQL,用户行为数据存储在日志文件中。这两个数据源都要先采集进来然后进行分析计算等,因为数据量会比较大,所以采用Hadoop的HDFS存储。

业务数据在MySQL中,由于是离线数仓,所以每天进行全量同步一次数据到HDFS中即可,这边我也不知道为啥还要进行增量同步到kafka中,然后由消费者发送给HDFS存储。

日志文件由flume监控采集,又因为日志文件比较大,如果flume采集完就直接发送给HDFS效率不好,所以flume采集完先发送给kafka的主题中,接着flume消费者订阅这个主题,消费日志文件发送给HDFS存储,kafka消息队列在这起消峰的作用。

经过上面的步骤后,数据就全部来到了HDFS中供使用。数据经过ODS、DWD、DWS、ADS层层处理产生想要的结果后,数据处理经过这些层,这些层总要有先后,定时任务调度的作用就是:如果数据在ODS处理好了,就可以自动进入到下一层DWD继续处理。层层处理后的想要结果由DataX将结果每日同步到MySQL中方便进行后续的使用,比如Superset可视化展示。

实时数仓

数据源源不断的来,流式处理数据,处理时间较短。

实时数仓用来处理那些实时性高的数据。

实时数仓架构参考图

实时的话,创建flink消费者从kafka中取出数据,那我就理解了为啥业务数据也要增量同步发给kafka了,因为实时处理需要,所以kafka就是ods层,flink进行简单处理后发送给DWD层。

flume采集文件案例

以下的架构就是一个实时数仓的简单架构,flume一直监控数据文件,只要一有文件来,就会被flume采集然后发给kafka主题,接着就会被flink消费。

用户行为数据:用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。由于用户的行为数据比较多,所以用户行为数据通常存储在日志文件中。

在flume的家目录中,采集一个job文件夹存放flume的配置文件,file_to_kafka.conf:

bash 复制代码
a1.sources = r1
a1.channels = c1

#配置source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /mydata/spoolingDir

#配置channel         org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = 192.168.10.128:9092
a1.channels.c1.kafka.topic = topic_log
a1.channels.c1.parseAsFlumeEvent = false

#组装 
a1.sources.r1.channels = c1

启动:

bash 复制代码
bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf -Dflume.root.logger=info,console
  • bin/flume-ng:这是启动 Flume 的可执行文件。
  • agent:指定要运行的 Flume 组件类型,这里是代理(agent)。
  • -n a1:指定代理的名称,这里是 "a1"。
  • -c conf/:指定配置文件的目录,Flume 会在该目录下查找配置文件。
  • -f job/file_to_kafka.conf:指定要使用的配置文件的路径,这是 Flume 的配置文件,它描述了数据传输的配置。
  • -Dflume.root.logger=info,console:设置 Flume 的日志级别和输出方式。在此设置中,日志级别为 "info",并将日志输出到控制台。

数仓技术选型

数据采集:如果数据是以文件形式存在可以使用flume监控采集,MySQL中的数据可以使用DataX采集

数据存储:数据量比较小可以用MySQL存储,数据量大用HDFS

数据计算:实时性要求高用flink流式处理

相关推荐
天冬忘忧25 分钟前
Kafka 生产者全面解析:从基础原理到高级实践
大数据·分布式·kafka
青云交1 小时前
大数据新视界 -- Hive 数据仓库:构建高效数据存储的基石(下)(2/ 30)
大数据·数据仓库·hive·数据安全·数据分区·数据桶·大数据存储
zmd-zk1 小时前
flink学习(2)——wordcount案例
大数据·开发语言·学习·flink
电子手信1 小时前
知识中台在多语言客户中的应用
大数据·人工智能·自然语言处理·数据挖掘·知识图谱
隔着天花板看星星1 小时前
Kafka-Consumer理论知识
大数据·分布式·中间件·kafka
holywangle1 小时前
解决Flink读取kafka主题数据无报错无数据打印的重大发现(问题已解决)
大数据·flink·kafka
隔着天花板看星星1 小时前
Kafka-副本分配策略
大数据·分布式·中间件·kafka
Lorin 洛林2 小时前
Hadoop 系列 MapReduce:Map、Shuffle、Reduce
大数据·hadoop·mapreduce
DolphinScheduler社区2 小时前
大数据调度组件之Apache DolphinScheduler
大数据
SelectDB技术团队2 小时前
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
大数据·数据库·数据仓库·数据分析·doris