• 数据仓库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 条。

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

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

    4. 压缩

            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:

    1. a1.sources = r1
    2. a1.channels = c1
    3. #配置source
    4. a1.sources.r1.type = spooldir
    5. a1.sources.r1.spoolDir = /mydata/spoolingDir
    6. #配置channel org.apache.flume.channel.kafka.KafkaChannel
    7. a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
    8. a1.channels.c1.kafka.bootstrap.servers = 192.168.10.128:9092
    9. a1.channels.c1.kafka.topic = topic_log
    10. a1.channels.c1.parseAsFlumeEvent = false
    11. #组装
    12. a1.sources.r1.channels = c1

    启动:

    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流式处理

    ETL和ELT

  • 相关阅读:
    谷歌在以色列的路口装上了 AI 红绿灯
    Visual Studio 和 VSCode 哪个好?
    SpringBoot-启动扩展点
    LinuxC实现FTP云盘
    算法--判断矩阵经轮转后是否一致
    java毕业设计校园墙系统mybatis+源码+调试部署+系统+数据库+lw
    idea 常用插件和常用快捷键 - 记录
    qt笔记之qml下拉标签组合框增加发送按钮发送标签内容
    【并发编程】Synchronized原理详解
    AJAX——ajax原理
  • 原文地址:https://blog.csdn.net/weixin_52938172/article/details/133341072