第一章 数仓概念
数仓定义(Data Warehouse)
为企业所有决策制定过程,提供所有系统数据支持的战略合辑
说白了,公司所有的数据都可以汇聚到数据仓库里
公司的数据来源
- 日志采集系统
- 业务系统数据库
- 爬虫系统等
所有业务部门的数据都可以放入数仓,数据库就无法完成这样的功能
数仓的好处
可帮助企业改进业务流程,控制成本,提高产品质量
数仓能做什么
清洗,转义,分类,重组,合并,拆分,统计等
数仓输出到哪里
报表系统 → 用户画像 → 推荐系统 → 机器学习 → 风控系统
第二章 项目需求及架构设计
项目需求分析
整个项目要做五件事儿
1. 采集埋点日志数据
日志行为数据与业务数据如何区分?
答:没有日志行为数据,网站可以正常工作,没有业务数据网站不能正常工作。比如,不去记录用户来到网站的
行为,用户依然可以完成购买。但是没有价格等业务数据,用户无法支付,网站就无法工作。
一般来说,日志数据是以文件形式存储的,业务数据是存储在Mysql数据库中的。
2. 采集业务数据库中的数据
3. 数仓的搭建(用户行为数仓、业务数仓)
4. 分析统计业务指标
5. 对结果进行可视化展示
项目框架
阿里云产品 | 简介 | 类比 |
---|---|---|
DataHub | 数据总线 | Kafka + 各种服务接口 |
MaxCompute | 大数据计算框架 | Hadoop + Hive + 调度器 |
DataWorks | 可视化MaxCompute的开发管理平台 | 目前没有 |
RDS | 关系型数据库 | Mysql |
QuickBI | 可视化数据展示工具 | Tableau或Echarts或Kibana |
ECS | 弹性服务器 | Linux服务器 |
技术选型
用途 | 阿里云框架 | 开源框架 |
---|---|---|
数据采集传输 | Flume(日志) + DataHub + RDS(业务) | Flume + Kafka(日志) + Sqoop + DataX(业务) |
数据存储 | MaxCompute + DataWorks | Mysql + Hadoop(或Hbase) |
数据计算 | MaxCompute + DataWorks | Hive+Spark(或Flink) |
数据可视化 | QuickBI | Tableau或Echarts或Kibana |
系统数据流程设计
服务器选型
服务器选物理机还是云主机?
1. 机器成本考虑
物理机:物理服务器本身费用,需要托管费用,一般寿命为5年
云主机:差不多的配置,每年费用与物理机差不多
2. 运维成本考虑
物理机:需要有专业的运维人员,平均每月15k,电费
集群资源规划设计
一、用户行为数据
1. 每天日活用户100万,每人一天平均100条:100万*100=10000万条
2. 每条日志1k左右,每天1亿条:100000000 / 1024 / 1024 ≈ 100G
3. 数仓ODS层采用LZO + parquet存储:100g压缩为10g左右
4. 数仓DWD层采用LZO + parquet存储:100g压缩为10g左右
5. 数仓DWS层轻度聚合存储(为了快速运算,不压缩)50g左右
6. 数仓ADS层数据量很小:忽略不计
7. 保存 3 副本:70g * 3 = 210g
8. 半年内不扩容:210g * 180天 ≈ 37T
9. 预留 20% ~ 30% Buf = 37T / 0.7 = 53T
二、DataHub中的数据
10. 每天约 100g * 副本2 = 200g
11. 保存 3 天 * 200g = 600g
12.预留 30%Buff = 600g / 0.7 = 857g ≈ 1T
三、Flume中默认缓存的数据比较小:暂时忽略不计
四、业务数据
1.
购买服务器建议
第四章 数据采集模块
阿里云服务器准备
云服务器ECS(Elastic Compute Service),弹性可伸缩的计算服务(服务器的配置可以随着需求任意改变)
计费方式
① 包年包月
② 按量付费
③ 抢占式实例
生产需求一般选包年包月或者按量付费
服务器所在地域选择
尽量选里公司近的,网络传输的效率更高
配置实例名称,主机名称
配置安全组
添加安全组规则
数据库端口3306/3306
授权对象:所有外网 0.0.0.0/0 另根据需要配置,实际应添加本机IP
ECS配置升级
① 停止实例
② 更改实例规格
基础环境准备
配置主机名称
① 查看主机名称,hostname命令
② 如果感觉主机名需要修改,编辑/etc/sysconfig/nentwork文件
NETWORKING=yes
HOSTNAME=
注意:主机名称不要有“_”下划线
③ 修改主机名称后,需要重启服务器,主机名才能生效
配置主机名称映射
① 查看阿里云分配的私有IP地址
② 根据阿里云分配的私有IP地址,配置主机名称映射,打开/etc/hosts,增加另外的ECS私有ip地址
DataWorks和MaxCompute
MaxCompute(大数据计算服务)是阿里巴巴自主研发的海量数据处理平台?主要提供数据上传和下载通道,提供SQL及MapReduce等多种计算
分析服务和安全解决方案
DataWorks(数据工厂,原大数据开发套件)是基于MaxCompute计算引擎的一站式大数据工厂,可完成数据集成、开发、治理、服务、质量、
安全等全套数据研发
DataWorks和MaxCompute一起提供了ETL和数仓管理功能,以及SQL、MR、Graph等多种经典的分布式计算模型
第六章 业务数仓理论
表的分类
1. 实体表:一个现实存在的业务对象,比如用户、商品、商家、销售员等
2. 维度表:对应一些业务状态、编号的解释表。也可称之为码表,比如地区表、订单状态、支付方式、商品分类等
3. 事务型事实表:指随着业务发生不断产生的数据。特点是,一旦发生不会再变化,如,交易流水,操作日志,出库入
库记录等
4. 周期型事实表:指随着业务发生不断产生的数据,与事务型不同的是,数据会随着业务的周期性的推进而变化,如,
订单,其中订单状态会周期性变化
同步策略
1. 全量表:存储完整数据
2. 增量表:存储新增数据
3. 新增及变化表:存储新增加的数据和变化的数据
实体表同步策略
实体表:如用户,商品,商家,销售员等
实体表数据量较小:通常可以做每日全量,即每天存一份完整数据。即每日全量
维度表同步策略
维度表:如订单状态、审批状态、商品分类
维度表数据量比较小:通常可以做每日全量,即每天存一份完整数据。即每日全量
注意:
① 针对可能会有变化的状态数据可以存储每日全量
② 没有变化的客观世界的维度(如,性别,地区,民族,政治成分,鞋子尺码)可以只存一分固定值
事务型事实表同步策略
事务型事实表:如,交易流水,操作日志,出入库记录等
因为数据不会变化,而且数据量巨大,所以每天只同步新增数据即可,所以可以做成每日增量表,即每日创建一个
分区存储
周期型事实表同步策略
这类表从数据量的角度,存每日全量的话,数据量太大,冗余也太大。如果用每日增量的话无法反映数据变化。
每日新增及变化量,包括了当日的新增和修改
第七章 业务数仓搭建
业务数仓系统流程设计
业务表结构
业务数仓分层
RDS服务器准备
例:192.168.0.0\24 指 允许192.168.0.1到192.168.0.255的指定ip地址访问RDS
ODS层数据表创建
方式1:一张一张建表
方式2:在DataStudio临时查询中统一执行建表语句
点击 数据开发→业务名称→表→右键导入表→选表
数据同步
目前MySQL里面的数据已经有了,ODS层表也已建好,需要创建一个脚本将MySQL中的数据同步到ODS层
1. 建立数据同步节点
数据集成→新建数据集成节点→数据同步
填写节点名称(表名+后缀,见名知义就好,例如:ods_user_info_sync)
2. 新增数据源
ODS层调度
DWD层调度
DWD层一般是对ODS层数据进行一定的清洗加工,如果是面对关系导入过来的数据表,还需要把原本的关系型表
结构,进行一定程度的维度退化,作为更易处理的明细数据
如:ODS地区 + ODS省份 = DWD省份地区
ODS商品信息 + ODS品牌 + ODS商品一级分类 = DWD商品信息