数仓学习---7、数据仓库设计、数据仓库环境准备

本文涉及的产品
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 数仓学习---7、数据仓库设计、数据仓库环境准备

这是本人的学习过程,看到的同道中人祝福你们心若有所向往,何惧道阻且长;

但愿每一个人都像星星一样安详而从容的,不断沿着既定的目标走完自己的路程;

最后想说一句君子不隐其短,不知则问,不能则学。

如果大家觉得我写的还不错的话希望可以收获关注、点赞、收藏(谢谢大家)


文章目录


一、数据仓库设计


1.1 数仓仓库分层规划


优秀可靠的数仓体系,需要良好的数据分层结构。合理的分层,能够使数据体系更清晰,使复杂问题得以简化。以下是该项目的分层规划

1696927692962.jpg


1.2 数据仓库构建流程


1696927759244.jpg


1.2.1 数据调研


数据调研重点要做两项工作,分别是业务调研和需求分析。这两项工作做的是否充分,直接影响着数据仓库的质量。

1、业务调研

业务调研的主要目标是熟悉业务流程、熟悉业务数据。


熟悉业务流程要求做到,明确每个业务的具体流程,需要将该业务所包含的每个业务过程一一列举出来。


熟悉业务数据要求做到,将数据(包括埋点日志和业务数据表)与业务过程对应起来,明确每个业务过程会对哪些表的数据产生影响,以及产生什么影响。产生的影响,需要具体到,是新增一条数据还是修改一条数据,并且需要明确新增的内容或是修改的逻辑。


下面是业务电商中的交易为例进行演示,交易业务涉及到的业务过程有买家下单、买家支付、卖家发货、买家收货,具体流程如下图。


1696927797857.jpg

1696927797857.jpg

2、需求分析

典型的需求指标如,最近一天各省份手机品类订单总额。

分析需求时,需要明确需求所需的业务过程及维度,例如该需求所需的业务过程就是买家下单,所需的维度有日期,省份,商品品类。


3、总结

做完业务分析和需求分析,要保证每个需求都能找到与之对应的业务过程及维度。若现有数据无法满足需求,则需要和业务方进行沟通,例如某个页面需要新增某个行为的埋点。


1.2.2 明确数据域


数据仓库模型设计除横向的分层之外,通常也需要根据业务情况进行纵向划分数据域。划分数据域的意义是便于数据的管理和应用。


通常可以根据业务过程或者部门进行划分,本项目根据业务过程进行划分,需要注意的是一个业务过程只能属于一个数据域。


下面是本数仓项目所需的所以业务过程及数据域划分详情。

数据域 业务过程
交易域 加购、下单、取消订单、支付成功、退单、退款成功
流量域 页面浏览、启动应用、动作、曝光、错误
用户域 注册、登陆
互动域 收藏、评价
工具域 优惠券领取、优惠券使用(下单)、优惠券使用(支付)



1.2.3 构建业务总线矩阵


业务总线矩阵包含维度模型所需的所有事实(业务过程)以及维度,以及各业务过程与各维度的关系。矩阵的行是一个个业务过程,矩阵的列是一个个的维度,行列的交点表示业务与维度的关系。

1696928033607.jpg

一个业务过程对应维度模型中的一张事务型事实表,一个维度则对应维度模型中的一张维度表。所以构建业务总线矩阵的过程就是设计维度模型的过程。但是需要注意的是,总线矩阵中通常只包含事务型事实表,另外两种类型的事实表需单独设计。


按照事务型事实表的设计流程,选择业务过程-》声明粒度-》确认维度-》确认事实,得到的最终的业务总线矩阵见以下表格。

1696928058169.jpg

后续的DWD层以及DIM层的搭建需要参考业务总线矩阵。


1.2.4 明确统计指标


明确统计指标具体的工作是深入分析,构建指标体系。构建指标体系的主要意义就是指定义标准化。所有指标的定义,都必须遵循同一套标准,这样能有效的避免指标定义存在歧义,指标定义重复等问题。


1、指标体系相关概念

(1)原子指标

原子指标基于某一业务过程的度量值,是业务定义中不可再拆解的指标,原子指标的核心功能就是对指标的聚合逻辑进行了定义。我们可以得出结论,原子指标包含三要素,分别是业务过程、度量值和聚合逻辑。


例如订单总额就是一个典型的原子指标,其中的业务过程为用户下单、度量指为订单金额,聚合逻辑为sum()求和。需求注意的是原子指标只是用来辅助定义指标一个概念,通常不会对应有实际统计需求与之对应。


(2)派生指标

派生指标基于原子指标,其与原子指标的关系如下图

1696928128641.jpg

与原子指标不同,派生指标通常会对应实际的统计需求。

(3)衍生指标

衍生指标是在一个或多个派生指标的基础上,通过各种逻辑运算复合而成。例如比率、比例等类型的指标。衍生指标也会对应实际统计需求。

2、指标体系对于数仓建模的意义

通过上述两个具体的案例可以看出,绝大多数的统计需求,都可以使用原子指标、派生指标以及衍生指标这套标准去定义。同时能够发现这些统计需求都直接的或间接的对应一个或者是多个派生指标。


当统计需求足够多时,必然会出现部分统计需求对应的派生指标相同的情况。这种情况下,我们就可以考虑将这些公共的派生指标保存下来,这样做的主要目的就是减少重复计算,提高数据的复用性。


这些公共的派生指标统一保存在数据仓库的DWS层。因此DWS层设计,就可以参考我们根据现有的统计需求整理出的派生指标。


按照上述标准整理出的指标体系如下:


1.2.4 维度模型设计


维度模型的设计参照上述得到的业务总线矩阵即可。事实表储存在DWD层,维度表储存在DIM层。


1.2.5 汇总模型设计


汇总模型的设计参考上述整理出的指标体系(主要是派生指标)即可。汇总表与派生指标的对应关系是,一张汇总表通常包含业务过程相同、统计周期相同、统计粒度相同的多个派生指标。


二、数据仓库环境准备


2.1 数据仓库运行环境


2.1.1 Hive环境搭建


1、Hive引擎简介

Hive引擎包括:默认MR、Tez、Spark。

Hive on Spark:Hive既作为储存元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。


Spark On Hive:Hive只作为储存原数据,Spark负责SQL解析优化,语法是SparkSQL语法,Spark负责采用RDD执行。


2、Hive on Spark配置

(1)兼容性说明

注意:官网下载的Hive3.1.2和Spark3.0.0默认是不兼容的。因为Hive3.1.2支持的Spark版本是2.4.5,所以需要我们重新编译Hive3.1.2版本。

编译步骤:官网下载Hive3.1.2源码,修改pom文件中引用的Spark版本为3.0.0,如果编译通过,直接打包获取jar包。如果报错,就根据提示,修改相关方法,直到不报错,打包获取jar包。

(2)在Hive所在节点部署Spark

(2-1)Spark官网下载jar包地址

http://spark.apache.org/downloads.html

(2-2)上传并解压解压spark-3.0.0-bin-hadoop3.2.tgz

(2-3)配置SPARK_HOME环境变量

vim /etc/profile.d/my_env.sh
#添加如下内容
# SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
#Source使其生效
 source /etc/profile.d/my_env.sh

(2-4)在hive中创建spark配置文件

vim /opt/module/hive/conf/spark-defaults.conf
#添加如下内容(在执行任务时,会根据如下参数执行)
spark.master                               yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                        hdfs://hadoop102:8020/spark-history
spark.executor.memory                    1g
spark.driver.memory            1g
#在HDFS创建如下路径,用于存储历史日志。
hadoop fs -mkdir /spark-history

(2-5)向HDFS上传Spark纯净版jar包

说明1:由于Spark3.0.0非纯净版默认支持的是hive2.3.7版本,直接使用会和安装的Hive3.1.2出现兼容性问题。所以采用Spark纯净版jar包,不包含hadoop和hive相关依赖,避免冲突。

说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。


(2-5-1)

上传并解压spark-3.0.0-bin-without-hadoop.tgz

(2-5-2)上传Spark纯净版jar包到HDFS


(2-6)修改hive-site.xml文件

vim /opt/module/hive/conf/hive-site.xml
#添加如下内容
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
<!--Hive执行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

3、Hive on Spark测试

(1)启动hive客户端

(2)创建一张测试表

(3)通过insert测试效果


2.1.2 Yarn环境配置


1、增加ApplicationMaster资源比例

容量调度器对每个资源队列中同时运行的Application Master占用的资源进行了限制,该限制通过yarn.scheduler.capacity.maximum-am-resource-percent参数实现,其默认值是0.1,表示每个资源队列上Application Master最多可使用的资源为该队列总资源的10%,目的是防止大部分资源都被Application Master占用,而导致Map/Reduce Task无法执行。

生产环境该参数可使用默认值。但学习环境,集群资源总数很少,如果只分配10%的资源给Application Master,则可能出现,同一时刻只能运行一个Job的情况,因为一个Application Master使用的资源就可能已经达到10%的上限了。故此处可将该值适当调大。

(1)在hadoop102的/opt/module/hadoop-3.1.3/etc/hadoop/capacity-scheduler.xml文件中修改如下参数值

vim capacity-scheduler.xml
#修改
<property>
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
    <value>0.8</value>
</property

2)分发capacity-scheduler.xml配置文件

 xsync capacity-scheduler.xml

(3)关闭正在运行的任务,重新启动yarn集群

sbin/stop-yarn.sh
sbin/start-yarn.sh


2.2 数据仓库开发环境


数仓开发工具可选用DBeaver或者DataGrip。两者都需要用到JDBC协议连接到Hive,故需要启动HiveServer2。

1、启动HiveServer2

hiveserver2

2、配置DataGrip连接

(1)创建连接

(2)配置连接属性

所有属性配置,和Hive的beeline客户端配置一致即可。初次使用,配置过程会提示缺少JDBC驱动,按照提示下载即可。

(3)测试使用

创建数据库gmall,并观察是否创建成功。

(1)创建数据库

(2)查看数据库

(3)修改连接,指明连接数据库

(4)选择当前数据库为gmall


2.3 模拟数据准备


通常企业在开始搭建数仓时,业务系统中会存在历史数据,一般是业务数据库存在历史数据,而用户行为日志无历史数据。假定数仓上线的日期为2020-06-14,为模拟真实场景,需准备以下数据。

注:在执行以下操作之前,先将HDFS上/origin_data路径下之前的数据删除。


1、用户行为日志

用户行为日志,一般是没有历史数据的,故日志只需要准备2020-06-14一天的数据。具体操作如下:

(1)启动日志采集通道,包括Flume、Kafak等

(2)修改两个日志服务器(hadoop102、hadoop103)中的

/opt/module/applog/application.yml配置文件,将mock.date参数改为2020-06-14。

(3)执行日志生成脚本lg.sh。

(4)观察HDFS是否出现相应文件。

2、业务数据

业务数据一般存在历史数据,此处需准备2020-06-10至2020-06-14的数据。具体操作如下。

(1)生产模拟数据

(1-1)修改hadoop102节点上的/opt/module/db_log/application.properties文件,将mock.date、mock.clear,mock.clear.user三个参数调整为如图所示的值。

(1-2)执行模拟生成业务数据的命令,生成第一天2020-06-10的历史数据。

java -jar gmall2020-mock-db-2021-01-22.jar

(1-3)修改/opt/module/db_log/application.properties文件,将mock.date、mock.clear,mock.clear.user三个参数调整为如图所示的值。

(1-4)执行模拟生成业务数据的命令,生成第二天2020-06-11的历史数据。

java -jar gmall2020-mock-db-2021-10-10.jar

(1-5)之后只修改/opt/module/db_log/application.properties文件中的mock.date参数,依次改为2020-06-12,2020-06-13,2020-06-14,并分别生成对应日期的数据。


(2)全量表同步

(2-1)执行全量表同步脚本

mysql_to_hdfs_full.sh all 2020-06-14

(2-1)观察HDFS上是否出现全量表数据


(3)增量表首日全量同步

(3-1)清除Maxwell断点记录

由于Maxwell支持断点续传,而上述重新生成业务数据的过程,会产生大量的binlog操作日志,这些日志我们并不需要。故此处需清除Maxwell的断点记录,另其从binlog最新的位置开始采集。

关闭Maxwell。

mxw.sh stop

清空Maxwell数据库,相当于初始化Maxwell。

mysql> 
drop table maxwell.bootstrap;
drop table maxwell.columns;
drop table maxwell.databases;
drop table maxwell.heartbeats;
drop table maxwell.positions;
drop table maxwell.schemas;
drop table maxwell.tables;

(3-2)修改Maxwell配置文件中的mock_date参数

vim /opt/module/maxwell/config.properties
#修改如下
mock_date=2020-06-14

(3-3)启动增量表数据通道,包括Maxwell、Kafka、Flume

(3-4)执行增量表首日全量同步脚本

mysql_to_kafka_inc_init.sh all


(3-5)观察HDFS上是否出现全量表数据

恭喜大家看完了小编的博客,希望你能够有所收获,我一直相信躬身自问和沉思默想会充实我们的头脑,希望大家看完之后可以多想想喽,编辑不易,求关注、点赞、收藏(Thanks♪(・ω・)ノ)


相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
5月前
|
存储 数据挖掘 BI
数据仓库深度解析与实时数仓应用案例探析
随着数据量的不断增长和数据应用的广泛深入,数据治理和隐私保护将成为数据仓库建设的重要议题。企业需要建立完善的数据治理体系,确保数据的准确性、一致性和完整性;同时加强隐私保护机制建设,确保敏感数据的安全性和合规性。
611 55
|
4月前
|
消息中间件 存储 大数据
大数据-数据仓库-实时数仓架构分析
大数据-数据仓库-实时数仓架构分析
153 1
|
4月前
|
容器
实时数仓Hologres构建环境问题之Dockerfile描述如何解决
在制品构建时明确依赖版本可避免因版本变动引起的构建差异,确保一致性与可预测性。通过Dockerfile指定确切版本的依赖与环境,能够跨平台重现相同的构建环境。为保证构建脚本一致性,应采用与业务代码解耦的构建脚本,并严格控制环境变量。构建准确性和速度都很重要,但通常准确性优先,确保制品质量稳定可靠。
50 0
|
6月前
|
Cloud Native 数据管理 OLAP
云原生数据仓库AnalyticDB产品使用合集之是否可以创建表而不使用分区
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
410 2
云原生数据仓库AnalyticDB产品使用合集之是否可以创建表而不使用分区
|
6月前
|
Cloud Native 关系型数据库 MySQL
《阿里云产品四月刊》—云原生数据仓库 AnalyticDB MySQL 版 新功能
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
111 3
|
5月前
|
存储 消息中间件 数据挖掘
数据仓库的深度探索与实时数仓应用案例解析
大数据技术的发展,使得数据仓库能够支持大量和复杂数据类型(如文本、图像、视频、音频等)。数据湖作为一种新的数据存储架构,强调原始数据的全面保留和灵活访问,与数据仓库形成互补,共同支持企业的数据分析需求。
|
6月前
|
SQL Cloud Native 关系型数据库
云原生数据仓库AnalyticDB产品使用合集之如何进行一键诊断
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
425 7
|
6月前
|
存储 SQL Cloud Native
云原生数据仓库AnalyticDB产品使用合集之热数据存储空间在什么地方查看
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
123 4
|
6月前
|
SQL Cloud Native 关系型数据库
云原生数据仓库AnalyticDB操作报错合集之执行sql的进程报错:"unknown connection id",是什么导致的
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
817 3
|
6月前
|
SQL Cloud Native 关系型数据库
云原生数据仓库AnalyticDB操作报错合集之报错代码"[31004, 2023121817001319216817200303151051107] : Compiler failed and interpreter is disabled"是什么导致的
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
731 3

热门文章

最新文章