@TOC
数仓笔记
数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS
尚硅谷数仓实战之 1 我的项目需要及架构设计
尚硅谷数仓实战之 2 数仓分层 + 维度建模
尚硅谷数仓实战之 3 数仓搭建
尚硅谷数据仓库 4.0 视频教程
B 站中转:2021 新版电商数仓 V4.0 丨大数据数据仓库我的项目实战
百度网盘:https://pan.baidu.com/s/1FGUb…,提取码:yyds
阿里云盘:https://www.aliyundrive.com/s…,提取码:335o
第 2 章 我的项目需要及架构设计
需要剖析
- 用户行为数据采集平台搭建
- 业务数据采集平台搭建
- 数据仓库维度建模
- 业务埋点
- 即席查问工具,随时进行指标剖析
- 集群监控,异样报警
- 元数据管理
- 品质监控
- 权限治理
我的项目框架
技术选型
思考因素:数据量大小、业务需要、行业内教训、技术成熟度、保护老本、总成本运算
相干技术列举:
数据流程设计
依据需要抉择适合的技术,设计规划具体的数据仓库架构流程
框架版本选型
尚硅谷测试稳固适配的版本
服务器选型
集群规模
集群资源规划设计
在企业中通常会搭建一套生产集群和一套测试集群。生产集群运行生产工作,测试集群用于上线前代码编写和测试。
1)生产集群
(1)耗费内存的离开(2)数据传输数据比拟严密的放在一起(Kafka、Zookeeper)(3)客户端尽量放在一到两台服务器上,不便内部拜访(4)有依赖关系的尽量放到同一台服务器(例如:Hive 和 Azkaban Executor)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
nn | nn | dn | dn | dn | dn | dn | dn | dn | dn |
rm | rm | nm | nm | nm | nm | nm | nm | ||
nm | nm | ||||||||
zk | zk | zk | |||||||
kafka | kafka | kafka | |||||||
Flume | Flume | flume | |||||||
Hbase | Hbase | Hbase | |||||||
hive | hive | ||||||||
mysql | mysql | ||||||||
spark | spark | ||||||||
Azkaban | Azkaban | ES | ES |
2)测试集群服务器布局
服务名称 | 子服务 | 服务器 hadoop102 | 服务器 hadoop103 | 服务器 hadoop104 |
---|---|---|---|---|
HDFS | NameNode | √ | ||
DataNode | √ | √ | √ | |
SecondaryNameNode | √ | |||
Yarn | NodeManager | √ | √ | √ |
Resourcemanager | √ | |||
Zookeeper | Zookeeper Server | √ | √ | √ |
Flume(采集日志) | Flume | √ | √ | |
Kafka | Kafka | √ | √ | √ |
Flume(生产 Kafka) | Flume | √ | ||
Hive | Hive | √ | ||
MySQL | MySQL | √ | ||
Sqoop | Sqoop | √ | ||
Presto | Coordinator | √ | ||
Worker | √ | √ | ||
Azkaban | AzkabanWebServer | √ | ||
AzkabanExecutorServer | √ | |||
Spark | √ | |||
Kylin | √ | |||
HBase | HMaster | √ | ||
HRegionServer | √ | √ | √ | |
Superset | √ | |||
Atlas | √ | |||
Solr | Jar | √ | ||
服务数总计 | 19 | 8 | 8 |
第 3 章 数据生成模块
指标数据
咱们要收集和剖析的数据次要包含 页面数据 、 事件数据 、 曝光数据 、 启动数据 和谬误数据。
页面
页面数据次要记录一个页面的用户拜访状况,包含拜访工夫、停留时间、页面门路等信息。
字段名称 | 字段形容 |
---|---|
page_id | 页面 idhome(” 首页 ”),category(” 分类页 ”),discovery(” 发现页 ”),top_n(” 热门排行 ”),favor(” 珍藏页 ”),search(” 搜寻页 ”),good_list(” 商品列表页 ”),good_detail(” 商品详情 ”),good_spec(” 商品规格 ”),comment(” 评估 ”),comment_done(” 评估实现 ”),comment_list(” 评估列表 ”),cart(” 购物车 ”),trade(” 下单结算 ”),payment(” 领取页面 ”),payment_done(” 领取实现 ”),orders_all(” 全副订单 ”),orders_unpaid(” 订单待领取 ”),orders_undelivered(” 订单待发货 ”),orders_unreceipted(” 订单待收货 ”),orders_wait_comment(” 订单待评估 ”),mine(” 我的 ”),activity(” 流动 ”),login(” 登录 ”),register(” 注册 ”); |
last_page_id | 上页 id |
page_item_type | 页面对象类型 sku_id(” 商品 skuId”),keyword(” 搜寻关键词 ”),sku_ids(” 多个商品 skuId”),activity_id(” 流动 id”),coupon_id(” 购物券 id”); |
page_item | 页面对象 id |
sourceType | 页面起源类型 promotion(” 商品推广 ”),recommend(” 算法举荐商品 ”),query(” 查问后果商品 ”),activity(” 促销流动 ”); |
during_time | 停留时间(毫秒) |
ts | 跳入工夫 |
事件
事件数据次要记录利用内一个具体操作行为,包含操作类型、操作对象、操作对象形容等信息。
字段名称 | 字段形容 |
---|---|
action_id | 动作 idfavor_add(” 增加珍藏 ”),favor_canel(” 勾销珍藏 ”),cart_add(” 增加购物车 ”),cart_remove(” 删除购物车 ”),cart_add_num(” 减少购物车商品数量 ”),cart_minus_num(” 缩小购物车商品数量 ”),trade_add_address(” 减少收货地址 ”),get_coupon(” 支付优惠券 ”); 注:对于下单、领取等业务数据,可从业务数据库获取。 |
item_type | 动作指标类型 sku_id(” 商品 ”),coupon_id(” 购物券 ”); |
item | 动作指标 id |
ts | 动作工夫 |
曝光
曝光数据次要记录页面所曝光的内容,包含曝光对象,曝光类型等信息。
字段名称 | 字段形容 |
---|---|
displayType | 曝光类型 promotion(” 商品推广 ”),recommend(” 算法举荐商品 ”),query(” 查问后果商品 ”),activity(” 促销流动 ”); |
item_type | 曝光对象类型 sku_id(” 商品 skuId”),activity_id(” 流动 id”); |
item | 曝光对象 id |
order | 曝光程序 |
启动
启动数据记录利用的启动信息。
字段名称 | 字段形容 |
---|---|
entry | 启动入口 icon(” 图标 ”),notification(” 告诉 ”),install(” 装置后启动 ”); |
loading_time | 启动加载工夫 |
open_ad_id | 开屏广告 id |
open_ad_ms | 广告播放工夫 |
open_ad_skip_ms | 用户跳过广告工夫 |
ts | 启动工夫 |
谬误
谬误数据记录利用应用
过程中的错误信息,包含谬误编号及错误信息。
字段名称 | 字段形容 |
---|---|
error_code | 错误码 |
msg | 错误信息 |
数据埋点
支流埋点形式(理解)
目前支流的埋点形式,有 代码埋点 (前端 / 后端)、 可视化埋点 、 全埋点 三种。
代码埋点 是通过调用埋点 SDK 函数,在须要埋点的业务逻辑功能位置调用接口,上报埋点数据。例如,咱们对页面中的某个按钮埋点后,当这个按钮被点击时,能够在这个按钮对应的 OnClick 函数外面调用 SDK 提供的数据发送接口,来发送数据。
可视化埋点只须要研发人员集成采集 SDK,不须要写埋点代码,业务人员就能够通过拜访剖析平台的“圈选”性能,来“圈”出须要对用户行为进行捕获的控件,并对该事件进行命名。圈选结束后,这些配置会同步到各个用户的终端上,由采集 SDK 依照圈选的配置主动进行用户行为数据的采集和发送。
全埋点 是通过在产品中嵌入 SDK,前端主动采集页面上的全副用户行为事件,上报埋点数据,相当于做了一个对立的埋点。而后再通过界面配置哪些数据须要在零碎外面进行剖析。
埋点数据上报机会
埋点数据上报机会包含两种形式。
形式一,在来到该页面时,上传在这个页面产生的所有数据(页面、事件、曝光、谬误等)。长处,批处理,缩小了服务器接收数据压力。毛病,不是特地及时。
形式二,每个事件、动作、谬误等,产生后,立刻发送。长处,响应及时。毛病,对服务器接收数据压力比拟大。
本次我的项目采纳形式一埋点。
埋点数据日志构造
咱们的日志构造大抵可分为两类,一是一般页面埋点日志,二是启动日志。
一般页面日志构造如下,每条日志蕴含了,以后页面的页面信息,所有事件(动作)、所有曝光信息以及错误信息。除此之外,还蕴含了一系列公共信息,包含设施信息,地理位置,利用信息等,即下边的 common 字段。
(1)一般页面埋点日志格局
{
"common": { -- 公共信息
"ar": "230000", -- 地区编码
"ba": "iPhone", -- 手机品牌
"ch": "Appstore", -- 渠道
"is_new": "1",-- 是否首日应用,首次应用的当日,该字段值为 1,过了 24:00,该字段置为 0
"md": "iPhone 8", -- 手机型号
"mid": "YXfhjAYH6As2z9Iq", -- 设施 id
"os": "iOS 13.2.9", -- 操作系统
"uid": "485", -- 会员 id
"vc": "v2.1.134" -- app 版本号
},
"actions": [-- 动作(事件)
{
"action_id": "favor_add", -- 动作 id
"item": "3", -- 指标 id
"item_type": "sku_id", -- 指标类型
"ts": 1585744376605 -- 动作工夫戳
}
],
"displays": [
{
"displayType": "query", -- 曝光类型
"item": "3", -- 曝光对象 id
"item_type": "sku_id", -- 曝光对象类型
"order": 1, -- 呈现程序
"pos_id": 2 -- 曝光地位
},
{
"displayType": "promotion",
"item": "6",
"item_type": "sku_id",
"order": 2,
"pos_id": 1
}
],
"page": { -- 页面信息
"during_time": 7648, -- 持续时间毫秒
"item": "3", -- 指标 id
"item_type": "sku_id", -- 指标类型
"last_page_id": "login", -- 上页类型
"page_id": "good_detail", -- 页面 ID
"sourceType": "promotion" -- 起源类型
},
"err":{ -- 谬误
"error_code": "1234", -- 错误码
"msg": "***********" -- 错误信息
},
"ts": 1585744374423 -- 跳入工夫戳,何时发送到服务器
}
(2)启动日志格局
启动日志构造绝对简略,次要蕴含公共信息,启动信息和错误信息。
{
"common": {
"ar": "370000",
"ba": "Honor",
"ch": "wandoujia",
"is_new": "1",
"md": "Honor 20s",
"mid": "eQF5boERMJFOujcp",
"os": "Android 11.0",
"uid": "76",
"vc": "v2.1.134"
},
"start": {
"entry": "icon", --icon 手机图标 notice 告诉 install 装置后启动
"loading_time": 18803, -- 启动加载工夫
"open_ad_id": 7, -- 广告页 ID
"open_ad_ms": 3449, -- 广告总共播放工夫
"open_ad_skip_ms": 1989 -- 用户跳过广告时点
},
"err":{ -- 谬误
"error_code": "1234", -- 错误码
"msg": "***********" -- 错误信息
},
"ts": 1585744304000
}
```xxxxxxxxxx {"common": { "ar": "370000", "ba": "Honor", "ch": "wandoujia", "is_new": "1", "md": "Honor 20s", "mid": "eQF5boERMJFOujcp", "os": "Android 11.0", "uid": "76", "vc": "v2.1.134"}, "start": {"entry": "icon", --icon 手机图标 notice 告诉 install 装置后启动 "loading_time": 18803, -- 启动加载工夫 "open_ad_id": 7, -- 广告页 ID "open_ad_ms": 3449, -- 广告总共播放工夫 "open_ad_skip_ms": 1989 -- 用户跳过广告时点},"err":{-- 谬误 "error_code": "1234", -- 错误码 "msg": "***********" -- 错误信息}, "ts": 1585744304000}