歡迎訪問筆者個人技術博客:
http://rukihuang.xyz/
學習視頻來源於尚硅谷,視頻鏈接:尚硅谷大數據項目數據倉庫,電商數倉V1.2新版
,Respect!
1 數據倉庫的概念
- 數據倉庫(Data Warehouse),是爲企業所有決策制定過程,提供所有系統數據支持的戰略集合。
- 通過對數據倉庫中數據的分析,可以幫助企業,改進業務流程、控制成本、題號提高產品質量等。
- 數據倉科,並不是數據的最終目的地,而是爲數據最終的目的地做好準備。這些準備包括對數據的:清洗、轉義、分類、重組、合併、拆分、統計等等。
2 項目需求分析
- 用戶行爲數據採集平臺搭建
- 業務數據採集平臺搭建
- 數據倉庫維度建模
- 分析:用戶、流量、會員、商品、銷售、地區、活動等電商核心主題,統計的報表指標近100個
- 採用即席查詢工具,隨時進行指標分析
- 對集羣新能及逆行監控,發生異常需要報警
- 元數據管理
- 質量監控
3 項目框架
3.1 技術選型
需求 |
可選技術框架 |
|
|
|
|
數據採集傳輸 |
Flume |
Kafka |
Sqoop |
Logstash |
DataX |
數據存儲 |
MySql |
HDFS |
HBase |
Redis |
MongoDB |
數據計算 |
Hive |
Tez |
Spark |
Flink |
Storm |
數據查詢 |
Presto |
Druid |
Impala |
Kylin |
|
數據可視化 |
Echarts |
Superset |
QuickBI |
DataV |
|
任務調度 |
Azkaban |
Oozie |
|
|
|
集羣監控 |
Zabbix |
|
|
|
|
元數據管理 |
Atlas |
|
|
|
|
數據質量監控 |
Griffin |
|
|
|
|
3.2 系統數據流程設計
3.3 框架版本選型
產品 |
版本 |
Hadoop |
2.7.2 |
Flume |
1.7.0 |
Kafka |
0.11.0.2 |
Hive |
2.3 |
Sqoop |
1.4.6 |
MySql |
5.6.24 |
Azkaban |
2.5.0 |
Java |
1.8 |
Zookeeper |
3.4.10 |
Presto |
0.189 |
3.4 服務器選型
- 本地搭建3臺Centos6虛擬機(4g內存 40g硬盤)
3.5 集羣資源規劃設計
3.5.1 集羣規模計算
- 每天日活用戶100萬,每人一天平均生產100條:100萬*100條=1億條
- 每條日誌1kb左右,每天1億條:100000000/1024/1024=100G
- 半年內不擴容:100G*180=18T
- 保存3個副本:18T*3=54T
- 預留20%~30%=54T/0.7=77T
- 共計8T*10臺服務器(128G內存,8T硬盤)
3.5.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 |
Azkaban WebServer |
√ |
|
|
|
AzkabanExecutorServer |
√ |
|
|
Druid |
Druid |
√ |
√ |
√ |
Kylin |
|
√ |
|
|
HBase |
HMaster |
√ |
|
|
|
HRegionServer |
√ |
√ |
√ |
Superset |
|
√ |
|
|
Atlas |
|
√ |
|
|
Solr |
Jar |
√ |
|
|
Griffin |
|
√ |
|
|
服務數總計 |
|
19 |
9 |
9 |
- 注意:HDFS的
NameNode
、SecondaryNameNode
和Yarn的ResourceManager
要配置在不同的服務器中,因爲都很耗內存
4 數據生成
4.1 埋點數據基本格式
- 公共字段:基本所有手機都包含的字段
- 業務字段:埋點上報的字段,有具體的業務類型
1587692644625 | {
"cm": {
"ln": "-66.7",
"sv": "V2.0.1",
"os": "8.1.7",
"g": "[email protected]",
"mid": "998",
"nw": "3G",
"l": "en",
"vc": "18",
"hw": "750*1134",
"ar": "MX",
"uid": "998",
"t": "1587650831270",
"la": "5.2",
"md": "HTC-16",
"vn": "1.3.1",
"ba": "HTC",
"sr": "N"
},
"ap": "app",
"et": [{
"ett": "1587626436201",
"en": "loading",
"kv": {
"extend2": "",
"loading_time": "0",
"action": "3",
"extend1": "",
"type": "1",
"type1": "201",
"loading_way": "2"
}
}, {
"ett": "1587604641583",
"en": "ad",
"kv": {
"activityId": "1",
"displayMills": "38392",
"entry": "1",
"action": "1",
"contentType": "0"
}
}, {
"ett": "1587672451544",
"en": "active_background",
"kv": {
"active_source": "1"
}
}, {
"ett": "1587631751514",
"en": "favorites",
"kv": {
"course_id": 8,
"id": 0,
"add_time": "1587610751419",
"userid": 1
}
}, {
"ett": "1587633225209",
"en": "praise",
"kv": {
"target_id": 7,
"id": 9,
"type": 2,
"add_time": "1587692182176",
"userid": 2
}
}]
}
4.2 事件日誌數據
4.2.1 商品列表頁 loading
標籤 |
含義 |
action |
動作:開始加載=1,加載成功=2,加載失敗=3 |
loading_time |
加載時長:計算下拉開始到接口返回數據的時間,(開始加載報 0,加載成功或加載失敗才上報時間) |
loading_way |
加載類型:1-讀取緩存,2-從接口拉新數據(加載成功才上報加載類型) |
extend1 |
擴展字段 Extend1 |
extend2 |
擴展字段 Extend2 |
type |
加載類型:自動加載=1,用戶下拽加載=2,底部加載=3(底部條觸發點擊底部提示條/點擊返回頂部加載) |
type1 |
加載失敗碼:把加載失敗狀態碼報回來(報空爲加載成功,沒有失敗) |
4.2.2 商品點擊 display
標籤 |
含義 |
action |
動作:曝光商品=1,點擊商品=2 |
goodsid |
商品 ID(服務端下發的 ID) |
place |
順序(第幾條商品,第一條爲 0,第二條爲 1,如此類推) |
extend1 |
曝光類型:1 - 首次曝光 2-重複曝光 |
category |
分類 ID(服務端定義的分類 ID) |
4.2.3 商品詳情頁 newsdetail
標籤 |
含義 |
entry |
頁面入口來源:應用首頁=1、push=2、詳情頁相關推薦=3 |
action |
動作:開始加載=1,加載成功=2(pv),加載失敗=3, 退出頁面=4 |
goodsid |
商品 ID(服務端下發的 ID) |
show_style |
商品樣式:0、無圖、1、一張大圖、2、兩張圖、3、三張小圖、4、一張小圖、5、一張大圖兩張小圖 |
news_staytime |
頁面停留時長:從商品開始加載時開始計算,到用戶關閉頁面所用的時間。若中途用跳轉到其它頁面了,則暫停計時,待回到詳情頁時恢復計時。或中途劃出的時間超過 10 分鐘,則本次計時作廢,不上報本次數據。如未加載成功退出,則報空。 |
loading_time |
加載時長:計算頁面開始加載到接口返回數據的時間 (開始加載報 0,加載成功或加載失敗才上報時間) |
type1 |
加載失敗碼:把加載失敗狀態碼報回來(報空爲加載成功,沒有失敗) |
category |
分類 ID(服務端定義的分類 ID) |
4.2.4 廣告 ad
標籤 |
含義 |
entry |
入口:商品列表頁=1 應用首頁=2 商品詳情頁=3 |
action |
動作: 廣告展示=1 廣告點擊=2 |
contentType |
Type: 1 商品 2 營銷活動 |
displayMills |
展示時長 毫秒數 |
itemId |
商品 id |
activityId |
營銷活動 id |
4.2.5 消息通知 notification
標籤 |
含義 |
action |
動作:通知產生=1,通知彈出=2,通知點擊=3,常駐通知展示(不重複上報,一天之內只報一次)=4 |
type |
通知 id:預警通知=1,天氣預報(早=2,晚=3),常駐=4 |
ap_time |
客戶端彈出時間 |
content |
備用字段 |
4.2.6 用戶後臺活躍 active_background
標籤 |
含義 |
active_source |
1=upgrade,2=download(下載),3=plugin_upgrade |
4.2.7 評論 comment
序號 |
字段名稱 |
字段描述 |
字段類型 |
長度 |
允許空 |
缺省值 |
1 |
comment_id |
評論表 |
int |
10,0 |
|
|
2 |
userid |
用戶 id |
int |
10,0 |
√ |
0 |
3 |
p_comment_id |
父級評論 id(爲 0 則是一級評論,不 爲 0 則是回覆) |
int |
10,0 |
√ |
|
4 |
content |
評論內容 |
string |
1000 |
√ |
|
5 |
addtime |
創建時間 |
string |
|
√ |
|
6 |
other_id |
評論的相關 id |
int |
10,0 |
√ |
|
7 |
praise_count |
點贊數量 |
int |
10,0 |
√ |
0 |
8 |
reply_count |
回覆數量 |
int |
10,0 |
√ |
0 |
4.2.8 收藏 favorates
序號 |
字段名稱 |
字段描述 |
字段類型 |
長度 |
允許空 |
缺省值 |
1 |
id |
主鍵 |
int |
10,0 |
|
|
2 |
course_id |
商品 id |
int |
10,0 |
√ |
0 |
3 |
userid |
用戶 ID |
int |
10,0 |
√ |
0 |
4 |
add_time |
創建時間 |
string |
|
√ |
|
4.2.9 點贊 praise
序號 |
字段名稱 |
字段描述 |
字段類型 |
長度 |
允許空 |
缺省值 |
1 |
id |
主鍵 id |
int |
10,0 |
|
|
2 |
userid |
用戶 id |
int |
10,0 |
√ |
|
3 |
target_id |
點讚的對象 id |
int |
10,0 |
√ |
|
4 |
type |
點贊類型 1 問答點贊 2 問答評論點贊 3 文章點贊數 4 評論點贊 |
int |
10,0 |
√ |
|
5 |
add_time |
添加時間 |
string |
|
√ |
|
4.2.10 錯誤日誌
標籤 |
含義 |
errorBrief |
錯誤摘要 |
errorDetail |
錯誤詳情 |
4.3 啓動日誌數據
標籤 |
含義 |
entry |
入口:push=1 , widget=2 , icon=3 , notification=4,lockscreen_widget =5 |
open_ad_type |
開屏廣告類型: 開屏原生廣告=1, 開屏插屏廣告=2 |
action |
狀態:成功=1 失敗=2 |
loading_time |
加載時長:計算下拉開始到接口返回數據的時間,(開始加載報 0,加載成功或加載失敗才上報時間) |
detail |
失敗碼(沒有則上報空) |
extend1 |
失敗的 message(沒有則上報空) |
en |
日誌類型 start |