尚硅谷数据仓库实战之1项目需求及架构设计
尚硅谷数据仓库实战之1项目需求及架构设计
- 第2章 项目需求及架构设计
- 需求分析
- 项目框架
- 技术选型
- 数据流程设计
- 框架版本选型
- 服务器选型
- 集群规模
- 集群资源规划设计
- 第3章 数据生成模块
- 目标数据
- 页面
- 事件
- 曝光
- 启动
- 错误
- 数据埋点
- 主流埋点方式(了解)
- 埋点数据上报时机
- 埋点数据日志结构
数仓笔记
数据仓库和数据集市详解: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 发布!
尚硅谷数据仓库实战之1项目需求及架构设计相关推荐
- 尚硅谷数据仓库实战之3数仓搭建
尚硅谷数据仓库实战之3数仓搭建 第4章 数仓搭建-ODS层 4.2 ODS层(业务数据) 4.2.1 活动信息表 第5章 数仓搭建-DIM层 5.1 商品维度表(全量) 5.6 用户维度表(拉链表) ...
- 大数据项目之电商数仓、数据仓库概念、项目需求及架构设计
文章目录 1.数据仓库概念 2. 项目需求及架构设计 2.1 项目需求分析 2.1.1 采集平台 2.1.2 离线需求 2.1.3 实时需求 2.1.4 思考题 2.2 项目框架 2.2.1 技术选型 ...
- 2 大数据电商数仓项目——项目需求及架构设计
2 大数据电商数仓项目--项目需求及架构设计 2.1 项目需求分析 用户行为数据采集平台搭建. 业务数据采集平台搭建. 数据仓库维度建模(核心):主要设计ODS.DWD.DWS.AWT.ADS等各个层 ...
- 数据仓库 — 01_项目需求分析与技术选型(数仓概念、项目需求及架构设计、数据生成模块格式要求)
文章目录 1 数据仓库的概念 2 项目需求分析 3 项目框架 3.1 技术选型 3.2 系统数据流程设计 3.3 框架版本选型 3.4 服务器选型 3.5 集群资源规划设计 3.5.1 集群规模计算 ...
- 尚硅谷 java基础第二个项目之客户关系管理系统
尚硅谷 java基础第二个项目之客户关系管理系统. 做了一些完善,增加性别,电话,邮箱有效性验证.其中电话和邮箱验证直接"饮用"了网友的果汁. 在此感谢各位原著大佬们的分享. 具体 ...
- 尚硅谷Docker实战教程-笔记02【安装docker、镜像加速器配置】
尚硅谷大数据技术-教程-学习路线-笔记汇总表[课程资料下载] 视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01[理念简介 ...
- 微服务_SpringCloud微服务架构实战:高并发微服务架构设计
高并发微服务架构设计 作为一个 IT 从业人员,我们经常会碰到类似于下面的一些问题: 单个项目巨大而沉重,难以维护. 系统稳定性得不到更有效的保证. 怎样才能持续地提升系统的性能. 怎样才能快速地响应 ...
- 前端架构师-week7-B端项目需求分析和架构设计
标题 B端项目需求分析 和 架构设计 将收获什么 ·做怎样的项目完成瓶颈期的突破 ·怎样从需求中寻找关键难点 ·怎样写技术解决方案 ·怎样进行基础的技术选型 关键词 ·挖掘难点 - 找到项目中的痛点 ...
- 尚硅谷数据仓库 用户行为分析
数据仓库的输入数据通常包括:业务数据.用户行为数据和爬虫数据等 业务数据:就是各行业在处理事务过程中产生的数据.比如用户在电商网站中登录.下单.支付等过程中,需要和网站后台数据库进行增删改查交互,产生 ...
最新文章
- java和python的web自动化有什么区别-python和java哪个更适合做自动化?
- 彻底弄懂响应式设计中的em和rem
- 【计算机系统设计】重点 · 学习笔记(1)(资源消耗)
- 一位合格的博士生需要有哪些条件和素质?
- 基础计算机b卷,计算机应用基础B卷.doc
- 如何使页面POSTBACK后,仍然显示原来的显示位置
- 计算机中用于描述音乐乐曲并,计算机中用于描述音乐乐曲并由声卡合成出音乐来的语言(规范)为。...
- 传奇架设教程GOM引擎微端设置方法
- js怎么获取ueditor值_js获取UEditor富文本编辑器中的图片地址
- IIS发布网站及网页显示设置
- UFS Write Booster Feature Overview
- 手机app服务器端开发初期---工具选择
- windows防火墙规则_如何在Windows防火墙中创建高级防火墙规则
- [转]全球付虚拟卡申请流程~
- 网络:简述对5G网络切片的认识
- opencv 编程总结与备忘
- android--手机震动--Vibrator
- win7和ubuntu18.04安装双系统详细教程
- 【中文技术文档的写作规范_P03】如何书写标点符号和控制文档体系
- 中鑫优配:黄金高位震荡等破位,原油顺势做空看跌!
热门文章
- nvidia设置wifi和接口
- 已解决Python.selenium爬虫必备设置永久禁止谷歌浏览器自动升级(亲测有效)
- php中用unset报错,慎用PHP的unset、array_unique方法
- 计算机开源期刊International Journal of Computer Science Issues
- MapMagic学习记录
- 顶尖项目管理高手,都在用“敏捷预算”模式!
- matlab生成jar eclipse正常调用jar
- Auto Completion in SE38 Editor
- 东南大学无锡分校有计算机专业吗,东南大学无锡分校和东南大学的区别
- 图像地点场景类型识别(PlaceCNN)实践