1序
1.1目标
1.2数仓概念
2项目需求及架构设计
2.1项目需求分析
项目需求:
1.业务数据传输通道搭建
2.数据仓库维度建模
3.任务调度
4.数据可视化
结合需求思考:
1.项目技术如何选型?
考虑因素:数据量大小、业务需求、行业内经验、技术成熟度、开发维护成本、总成本预算
数据采集传输:Kafka + Flink-CDC
数据存储:MySQL + HDFS + HBase
数据计算:Flink
数据查询:ClickHouse
可视化:Sugar
2.框架版本如何选型
EMR(EMR 提供了自动化的集群管理、调度和监控功能,用户无需关心底层的集群维护,只需专注于数据处理和分析任务。腾讯云 EMR 更类似于一种托管式的大数据服务,而不是传统意义上的云主机服务。)、Apache
3.服务器使用物理机还是云主机
4.如何确认集群规模
2.2项目框架
系统数据流程设计
框架版本选型
腾讯云EMR具体版本型号
服务器选型
集群规模
集群资源规划设计
3电商业务
同离线
4腾讯EMR选购
4.2购买-弹性MapReduce
4.2.1 软件配置
按量计费
4.2.2新建私有网络
4.2.3创建安全组
购买后查看集群创建相关信息
4.2.7节点管理
只有Master节点有公网IP,所以只允许连接Master节点
打开远程连接工具配置,此处以SecureCRT为例
新建一个session,填写hostname,主机填Master节点公网IP
4.3服务器环境准备
4.3.1配置主机名称
所有jar包必须先上传至Master节点后再拷贝到core节点,每次登录集群时也都是先登录到Master节点
4.3.2修改服务器hosts文件
IP填写的是私有IP,每人不一样,做完后ping一下
4.2.3配置SSH无密登录(可选)
原理
5电商业务数据
分表及用MySQL完成模拟数据生生成同离线
6业务数据采集模块
6.1业务数据环境准备
6.1.1Kafka部署
1)将Kafka安装包上传到master节点
2)将Kafka安装包从master节点拷贝到core节点
3)进入core节点,解压安装包
4)在/opt/module/kafka_2.12-3.0.0目录下创建data文件夹
5)修改配置文件
注:ZooKeeper集群地址在腾讯云EMR可以查看
6)配置环境变量
7)分发kafka根目录到其他core节点
1)编写xsync分发脚本
2)vim以下内容
3)分发kafka:要在其他机器配置环境变量
8)分别在其他core节点上修改配置文件
注:broker.id不能重复
9)启动集群
10)关闭集群
11)kafka群起脚本
在/use/local/bin目录vimkk.sh
6.2业务数据同步概述
6.2.1数据同步策略概述
实时数仓只需要增量同步,就是每天只将业务数据中的新增及变化数据同步到数据仓库
6.2.3数据同步工具部署
1)简介
CDC是ChangeDataCapture(变更数据获取)的简称,核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中共其他服务进行订阅及消费
Flink社区开发了flink-cdc-connectors组件,这是一个可以直接从MySQL、PostgreSQL等数据库直接读取全量数据和增量变更数据的source组件,目前也已开源。
2)输出数据格式
注:FlinkCDC输出的json字段说明:
3)开启bin-log
Flink-CDC同步MySQL数据是通过binlog实现的,MySQL服务的binlog默认是关闭的,需要在配置文件中开启。
1打开MySQL的配置文件my.cnf
2增加如下配置
其中binlog_format参数配置的是MySQL的binlog类型,共有如下3种可选配置。
1 statement:基于语句。binlog会记录所有会修改数据的SQL语句,包括INSERT、UPDATE、DELETE等。
优点:节省空间
缺点:可能会造成数据不一致,例如insert中包含now(),写入binlog和读取binlog时函数所得值不同
2 row:基于行,binlog会记录每次写操作后,被操作行记录的变化
优点:保持数据的绝对一致性
缺点:占用空间较大
3 mixed:混合模式,默认是statement,如果SQL语句可能导致数据不一致,就自动换成row
3 重启mysql生效
6.3 业务数据同步
6.3.1 Flink安装
1)将flink安装包上传至hadoop101的/opt/software目录
2)解压至/opt/module
6.3.2 FlinkCDC配置
我们要同步gmall数据库下的所有表,发送到kafka的topic_db主题
1)环境搭建
在工程中新建模块 gmall-flink-cdc
创建如下包结构
作用:
修改配置文件,在pom.xml添加配置
在resource目录创建log4.properties配置文件
2)代码实现
1 KafkaUtil工具类
2 创建时间戳处理工具类
3 查询 HDFS URI
4 FlinkCDC采集数据示例
5 编写主程序,监控MySQL变化数据并将数据写入Kafka
3)打包部署
1 将pom文件中服务器已有依赖的scope修改为provided
文件中修改举例对比:
修改 Maven 项目中已有依赖的 scope 为 provided 的作用主要有两个方面:
-
减少打包体积:将某些依赖的 scope 修改为 provided 可以减少最终打包的 WAR 文件或者 JAR 文件的体积。这些依赖项不会被打包到应用程序中,而是由容器(如 Tomcat、Jetty 等)在运行时提供,因此可以减少部署的时间和网络传输的成本。
-
避免冲突和版本不一致性:一些依赖项可能会与容器本身提供的库存在冲突,或者与其他依赖项版本不兼容。将这些依赖的 scope 设置为 provided 可以避免这些冲突和版本不一致性的问题,因为容器会使用自己提供的版本而不是应用程序中的版本。
总的来说,将一些依赖的 scope 修改为 provided 可以提高应用程序的部署效率、减少依赖冲突和版本不一致性的风险。
2 打包
点击Maven Lifecycle中的clean清除历史编译文件和jar包,再点击package打包
3 查看打包结果
4 上传带有依赖的jar包
5 提交job
6 编写FlinkCDC启停脚本 flink-cdc.sh