尚硅谷数仓实战之1项目需求及架构设计

@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项目需求及架构设计
文章图片

框架版本选型
尚硅谷数仓实战之1项目需求及架构设计
文章图片

尚硅谷测试稳定适配的版本
尚硅谷数仓实战之1项目需求及架构设计
文章图片

服务器选型
尚硅谷数仓实战之1项目需求及架构设计
文章图片

集群规模
尚硅谷数仓实战之1项目需求及架构设计
文章图片

集群资源规划设计
在企业中通常会搭建一套生产集群和一套测试集群。生产集群运行生产任务,测试集群用于上线前代码编写和测试。
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章 数据生成模块 目标数据 我们要收集和分析的数据主要包括页面数据、事件数据、曝光数据、启动数据和错误数据。
页面
页面数据主要记录一个页面的用户访问情况,包括访问时间、停留时间、页面路径等信息。
尚硅谷数仓实战之1项目需求及架构设计
文章图片

字段名称 字段描述
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 跳入时间
事件
事件数据主要记录应用内一个具体操作行为,包括操作类型、操作对象、操作对象描述等信息。
尚硅谷数仓实战之1项目需求及架构设计
文章图片

字段名称 字段描述
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 动作时间
曝光
【尚硅谷数仓实战之1项目需求及架构设计】曝光数据主要记录页面所曝光的内容,包括曝光对象,曝光类型等信息。
尚硅谷数仓实战之1项目需求及架构设计
文章图片

字段名称 字段描述
displayType 曝光类型promotion("商品推广"),recommend("算法推荐商品"),query("查询结果商品"),activity("促销活动");
item_type 曝光对象类型sku_id("商品skuId"),activity_id("活动id");
item 曝光对象id
order 曝光顺序
启动
启动数据记录应用的启动信息。
尚硅谷数仓实战之1项目需求及架构设计
文章图片

字段名称 字段描述
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}

    推荐阅读