@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)
12345678910
nnnndndndndndndndndn
rmrmnmnmnmnmnmnm
nmnm
zkzkzk
kafkakafkakafka
FlumeFlumeflume
HbaseHbaseHbase
hivehive
mysqlmysql
sparkspark
AzkabanAzkabanESES

2)测试集群服务器布局

服务名称子服务服务器hadoop102服务器hadoop103服务器hadoop104
HDFSNameNode
DataNode
SecondaryNameNode
YarnNodeManager
Resourcemanager
ZookeeperZookeeper Server
Flume(采集日志)Flume
KafkaKafka
Flume(生产Kafka)Flume
HiveHive
MySQLMySQL
SqoopSqoop
PrestoCoordinator
Worker
AzkabanAzkabanWebServer
AzkabanExecutorServer
Spark
Kylin
HBaseHMaster
HRegionServer
Superset
Atlas
SolrJar
服务数总计1988

第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}