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

@TOC

数仓笔记

数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS:https://blog.csdn.net/weixin_42526326/article/details/121633372

尚硅谷数仓实战之1项目需求及架构设计:https://blog.csdn.net/weixin_42526326/article/details/121658388

尚硅谷数仓实战之2数仓分层+维度建模:https://blog.csdn.net/weixin_42526326/article/details/121658605

尚硅谷数仓实战之3数仓搭建:https://blog.csdn.net/weixin_42526326/article/details/121658635

尚硅谷数据仓库4.0视频教程

B站直达:2021新版电商数仓V4.0丨大数据数据仓库项目实战
百度网盘:https://pan.baidu.com/s/1FGUb8X0Wx7IWAmKXBRwVFg ,提取码:yyds
阿里云盘:https://www.aliyundrive.com/s/F2FuMVePj92 ,提取码: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}

本文由博客一文多发平台 OpenWrite 发布!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容