模拟数据准备
通常企业在开始搭建数仓时,业务系统中会存在历史数据,一般是业务数据库存在历史数据,而用户行为日志无历史数据。假定数仓上线的日期为2022-02-21,为模拟真实场景,需准备以下数据。
1**)用户行为日志**
用户行为日志,一般是没有历史数据的,故日志只需要准备2022-02-21一天的数据。具体操作如下:
(1)启动Kafka。
(2)启动一个命令行 Kafka 消费者,消费 topic_log 主题的数据。
[root@hadoop102 bin]$ kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic topic_log
(3)修改两个日志服务器(hadoop102、hadoop103)中的
/opt/module/applog/application.yml配置文件,将mock.date参数改为2022-02-21。
(4)执行日志生成脚本lg.sh。
(5)观察命令行 Kafka 消费者是否消费到数据。
2**)业务数据**
实时计算不考虑历史的事实数据,但要考虑历史维度数据。因此要对维度相关的业务表做一次全量同步。
(1)维度数据首日全量同步
①修改Maxwell配置文件中的mock_date参数
[root@hadoop102 maxwell]$ vim /opt/module/maxwell/config.properties
mock_date=2022-02-21
②启动业务数据采集通道,包括Maxwell、Kafka
③启动Kafka 消费者,观察数据是否写入 Kafka
[root@hadoop102 bin]$ kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic topic_db
(2)业务数据生成
业务数据生成之前要将application. properties 文件中的mock.date 参数修改为业务时间,首日应设置为2022-02-21。
mock.clear 和 mock.clear.user 均为0,表示不重置业务数据和用户数据。如下。
这里笔者重置了,笔者的数据库使用的gmall-flink,是一个全新的数据库
同时要保证 Maxwell 配置文件 config.properties 中的 mock.date 参数和 application. properties 中 mock.date 参数的值保持一致。如下。
编写业务数据首日全量脚本
与维度相关的业务表如下
activity_info
activity_rule
activity_sku
base_category1
base_category2
base_category3
base_province
base_region
base_trademark
coupon_info
coupon_range
financial_sku_cost
sku_info
spu_info
user_info
切换到/root/bin 目录,创建mysql_to_kafka.sh 文件
[root@hadoop102 bin]$ vim mysql_to_kafka_init.sh
在脚本中添加如下内容
增加执行权限,执行脚本
[root@hadoop102 bin]$ chmod +x mysql_to_kafka_init.sh
[root@hadoop102 bin]$ mysql_to_kafka_inc_init.sh all
数仓开发之ODS层
采集到Kafka 的topic_log 和 topic_db 主题的数据即为实时数仓的 ODS 层,这一层的作用是对数据做原样展示和备份。