尚硅谷數倉實戰之1項目需求及架構設計


@

數倉筆記

數據倉庫和數據集市詳解:ODS、DW、DWD、DWM、DWS、ADS

尚硅谷數倉實戰之1項目需求及架構設計

尚硅谷數倉實戰之2數倉分層+維度建模

尚硅谷數倉實戰之3數倉搭建

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM