欢迎访问笔者个人技术博客:
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": "50F3N8XP@gmail.com",
"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 |
所有评论(0)