项目整体思路和架构

项目最终成果展示:
在这里插入图片描述

本项目主要参考尚硅谷的Flink实时数仓项目完成,最近又重新跑了一遍,项目整体我会在后续上传到码云中,
也会逐步同步更新到博客中来,里面不仅包含了整体代码和整个集群搭建过程,也包含了一些我自己的理解和测试过程
希望大家能喜欢,以后我也会把我整个的大数据学习过程和笔记做一个分享。非常欢迎一起学习大数据的朋友,
大家可以一起交流和学习。

实时数仓分层思想

	这里采用的架构和离线数仓架构不同,整个项目共分为6个层来做,但注意:这些层级之间并不是纯粹的
上下关联关系:也不是一定非要有这6个层级;

用一张图来简单说明:在这里插入图片描述

➢ ODS(原始数据层)

原始数据,日志和业务数据。

    这里可以简单理解为生产环境中日志数据和业务数据生成之后的一个汇集地,是大数据数仓数据初始化的第
一步;
    

➢ DWD(细节数据层)

根据数据对象为单位进行分流,比如订单、页面访问等等。

    这一层其实就是对第一层进行了分流、过滤等操作后的数据内容,比如根据不同的业务需求把数据流分为订
单、人物、商品等不同的数据流;也可以把日志数据分为页面、启动、异常、曝光等类别;
    这一层的主要目的是为了把数据细化,这样方便后续的维度关联;

➢ DIM(维度数据层)

存储维度数据的层。

    有时候很多人会对维度的概念产生疑问,简单用数据分析中的知识来理解,一个维度就是一个特征,维度数
据就是一个特征对应的全部数据,维度关联就是把不同的特征放到一起,然后组成一个一个的宽表,也即我们MySql
中经常创建和查询的信息表;
    比如一个商品主题宽表,里面既可以包含商品类别、价格等自身的信息,还可以包含这个商品有关的订单统
计数量、时间、交易额,甚至是购买者的地区、年龄、身份等信息都能包含。我们都知道实际生产过程中这些信
息是不会自动产生在一块的,那么他们是如何产生的?难道都是后期的ETL完成的吗?这里就涉及到了维度关联
的概念,这个概念我会在后续的项目中详细讲解,这里我只讲解一个例子:
    假设商品表有商品ID、商品类型等信息;订单表有商品ID、订单ID、订单明细等信息;人物表有订单ID、
年龄、地区等信息;我们可以通过商品ID把商品表和订单表关联到一起,再通过这张新表的订单ID把人物表也关
联起来,这就是一个简单的维度关联概念;通过维度把一个个的表关联在一起,组成宽表;

➢ DWM
对于部分数据对象进行进一步加工,比如独立访问、跳出行为,也可以和维度进行关联,形成宽表,依旧是明细
数据。

    我个人认为这一层是最模糊的一层概念,因为这一层仅仅只是一个数据的细化,如果数据不是很复杂,可以
 省略掉这一层,当然,实际生产环境可不会像是我们这个项目一样基础,所以展示在这提供参考;总体来说,这
 一层的数据是dwd和ods的一个简单汇集,是为了分化出某些特殊行为或者和某些数据结合形成新的明细表。


➢ DWS(服务数据层)

根据某个主题将多个事实数据轻度聚合,形成主题宽表。

   这一层就是刚才提到的宽表存储,这里的数据表可以理解成一个一个的需求,比如我数据分析部门需要通过
商品订单来分析一个地区的偏好,那么就可以把地区表和商品表、订单表合为一个宽表,然后存储到这一层;


➢ ADS

把 Clickhouse 中的数据根据可视化需要进行筛选聚合。

    这一层就是数据最终拿来运用的地方了,数据可以做可视化,也可以通过后端知识,提供数据接口给数据
分析部门使用;

项目流程图:在这里插入图片描述

   这里不对这个图做太多讲解,了解的自然一目了然,不了解的希望看到之后的内容,
   再返回来参考这张图,一定会豁然开朗。

以下是我觉得整个项目中经常要用到的信息的汇总以及一些经常测试时要注意的点:

//kafka中的Topic

ods_base_log //产生的日志数据直到发到kafka的日志主题
ods_base_db_m //产生的业务数据直接发到kafka的业务数据接收主题
 
    
dwd_start_log //log日志经过Flink分流后的dwd层的启动log主题
dwd_display_log //log日志经过Flink分流后的dwd层的曝光log主题
dwd_page_log //log日志经过Flink分流后的dwd层的页面log主题
dwd_order_info //事实数据中的订单数据
dwd_order_detail //事实数据中的订单明细数据 
dwd_payment_info //实时数据中的订单数据    
    
    
dwm_unique_visit //uv计算和过滤后数据发送主题   
dwm_user_jump_detail //跳出明细计算后数据接收主题
dwm_order_wide //维度关联后的订单宽表数据   
    

dws_product_stats //dws层商品主题宽表
    
//clickhouse表:
visitor_stats_0709 访客主题宽表内容
product_stats_0709 商品主题宽表数据 
province_stats_0709 地区主题宽表 
keyword_stats_0709 关键词主题宽表  
    
//MySql中数据库:
maxwell:maxwell元数据库;
gmall0709:业务数据存储数据库
gmall0709_realtime:配置表信息所在数据库(动态分流)    
    
    
//概念:
//SPU:标准化产品单元
SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚合的最小单位,是一组可复用、易检
索的标准化信息的集合,该集合描述了一个产品的特性,比如一台电脑的各种配置组合;
//SKU:库存量单位
SKU=stock keeping unit(库存量单位) SKU即库存进出计量的单位(买家购买、商家进货、供应商备货、工
厂生产都是依据SKU进行的),在服装、鞋类商品中使用最多最普遍。 例如纺织品中一个SKU通常表示:规格、
颜色、款式。    
    
//clickhouse的使用:
启动服务:(先开启zk集群)
sudo systemctl start clickhouse-server
启动客户端:
clickhouse-client -m;(加上-m可以换行写SQL语句)
关闭服务:
service clickhouse-server stop;
    
//redis的使用;
redis-server ../redis.conf
查看是否启动成功👇
ps -ef | grep redis  
2、使用redis-cli连接
redis-cli -h 主机名 
   
//phoenix客户端:
查看表结构 !describe 表名  
查看表 !tables   show tables;
删除表 drop table 表名
退出phoenix  !exit  

以下是我的整个项目所用框架,Hive可以忽略,这是我用来做快照的集群中自带的;
在这里插入图片描述
项目开端内容就到这里了, 我会继续更新~~
项目所用框架点这里:
集群框架、代码、原项目资料下载点此
提取码:whqf
gitee项目地址

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐