@
數倉筆記
尚硅谷數據倉庫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}