离线数仓
1、数据仓库概念
数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合。
通过对数据仓库中的数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量。
数据仓库并不是数据的最终目的地,而是为数据的最终目的地做好准备,这些准备包括对数据的:清洗、转义、分类、重组、合并、拆分、统计等等
2、项目需求及架构设计
~项目需求分析
- 数据采集平台搭建
- 实现用户行为数据仓库的分层搭建
- 实现业务数据仓库的分层搭建
- 针对数据仓库中的数据进行,留存、转化率、GMV、复购率、活跃等报表分析
~项目框架
~~技术选型
- 数据采集传输:Flume、Kafka、Sqoop、Logstash、DataX
- 数据储存:MySql、HDFS、HBase、Redis、MongoDB
- 数据计算:Hive、Tez、Spark、Flink、Storm
- 数据查询:Presto、Druid、Impala、Kylin
~~系统数据流程设计
~~框架版本选型
- Apache:运维麻烦,组件间兼容性需要自己调研
- CDH:国内使用最多的版本,但CM不开源
- HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少
~~集群资源规划设计
服务名称 |
子服务 |
服务器 hadoop102 |
服务器 hadoop103 |
服务器 hadoop104 |
HDFS |
NameNode |
√ |
|
|
|
DataNode |
√ |
√ |
√ |
|
SecondaryNameNode |
|
|
√ |
Yarn |
NodeMeanager |
√ |
√ |
√ |
|
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 |
√ |
√ |
√ |
服务器总计 |
|
13 |
8 |
9 |
3、数据生成模块
~埋点数据基本格式
- 公共字段:基本所有安卓手机都包含的字段
- 业务字段:埋点上报的字段,有具体的业务类型
业务字段的上传
{
"ap":"xxxxx",//项目数据来源 app pc
"cm": { //公共字段
"mid": "", // (String) 设备唯一标识
"uid": "", // (String) 用户标识
"vc": "1", // (String) versionCode,程序版本号
"vn": "1.0", // (String) versionName,程序版本名
"l": "zh", // (String) language系统语言
"sr": "", // (String) 渠道号,应用从哪个渠道来的。
"os": "7.1.1", // (String) Android系统版本
"ar": "CN", // (String) area区域
"md": "BBB100-1", // (String) model手机型号
"ba": "blackberry", // (String) brand手机品牌
"sv": "V2.2.1", // (String) sdkVersion
"g": "", // (String) gmail
"hw": "1620x1080", // (String) heightXwidth,屏幕宽高
"t": "1506047606608", // (String) 客户端日志产生时的时间
"nw": "WIFI", // (String) 网络模式
"ln": 0, // (double) lng经度
"la": 0 // (double) lat 纬度
},
"et": [ //事件
{
"ett": "1506047605364", //客户端事件产生时间
"en": "display", //事件名称
"kv": { //事件结果,以key-value形式自行定义
"goodsid": "236",
"action": "1",
"extend1": "1",
"place": "2",
"category": "75"
}
}
]
}
示例日志(服务器时间戳 | 日志):
1540934156385|{
"ap": "gmall",
"cm": {
"uid": "1234",
"vc": "2",
"vn": "1.0",
"la": "EN",
"sr": "",
"os": "7.1.1",
"ar": "CN",
"md": "BBB100-1",
"ba": "blackberry",
"sv": "V2.2.1",
"g": "abc@gmail.com",
"hw": "1620x1080",
"t": "1506047606608",
"nw": "WIFI",
"ln": 0
},
"et": [
{
"ett": "1506047605364", //客户端事件产生时间
"en": "display", //事件名称
"kv": { //事件结果,以key-value形式自行定义
"goodsid": "236",
"action": "1",
"extend1": "1",
"place": "2",
"category": "75"
}
},{
"ett": "1552352626835",
"en": "active_background",
"kv": {
"active_source": "1"
}
}
]
}
}
~事件日志数据
~~商品列表页(loading)
事件名称:loading
标签 |
含义 |
action |
动作:开始加载=1,加载成功=2,加载失败=3 |
loading_time |
加载时长:计算下拉开始到接口返回数据的时间,(开始加载报0,加载成功或加载失败才上报时间) |
loading_way |
加载类型:1-读取缓存,2-从接口拉新数据(加载成功才上报加载类型) |
|
|
extend1 |
扩展字段 Extend1 |
extend2 |
扩展字段 Extend2 |
type |
加载类型:自动加载=1,用户下拽加载=2,底部加载=3(底部条触发点击底部提示条/点击返回顶部加载) |
type1 |
加载失败码:把加载失败状态码报回来(报空为加载成功,没有失败) |
~~商品点击(display)
事件标签:display
标签 |
含义 |
action |
动作:曝光商品=1,点击商品=2, |
goodsid |
商品ID(服务端下发的ID) |
place |
顺序(第几条商品,第一条为0,第二条为1,如此类推 |
extend1 |
曝光类型:1 - 首次曝光 2-重复曝光 |
category |
分类ID(服务端定义的分类ID) |
~~商品详情页(newsdetail)
事件标签:newsdetail
标签 |
含义 |
entry |
页面入口来源:应用首页=1、push=2、详情页相关推荐=3 |
entry |
动作:开始加载=1,加载成功=2(pv),加载失败=3, 退出 |
goodsid |
商品ID(服务端下发的ID) |
show_style |
商品样式:0、无图、1、一张大图、2、两张图、3、三张小图、4、一张小图、5、一张大图两张小图 |
news_staytime |
页面停留时长:从商品开始加载时开始计算,到用户关闭页面所用的时间。若中途用跳转到其它页面了,则暂停计时,待回到详情页时恢复计时。或中途划出的时间超过10分钟,则本次计时作废,不上报本次数据。如未加载成功退出,则报空。 |
loading_time |
加载时长:计算页面开始加载到接口返回数据的时间 (开始加载报0,加载成功或加载失败才上报时间) |
type1 |
加载失败码:把加载失败状态码报回来(报空为加载成功,没有失败) |
category |
分类ID(服务端定义的分类ID) |
~~广告(ad)
事件名称:ad
标签 |
含义 |
entry |
入口:商品列表页=1 应用首页=2 商品详情页=3 |
action |
动作:请求广告=1 取缓存广告=2 广告位展示=3 广告展示=4 广告点击=5 |
content |
状态:成功=1 失败=2 |
detail |
失败码(没有则上报空) |
source |
广告来源:admob=1 facebook=2 ADX(百度)=3 VK(俄罗斯)=4 |
behavior |
用户行为:主动获取广告=1 被动获取广告=2 |
|
|
newstype |
Type: 1- 图文 2-图集 3-段子 4-GIF 5-视频 6-调查 7-纯文 8-视频+图文 9-GIF+图文 0-其他 |
show_style |
内容样式:无图(纯文字)=6 一张大图=1 三站小图+文=4 一张小图=2 一张大图两张小图+文=3 图集+文 = 5 一张大图+文=11 GIF大图+文=12 视频(大图)+文 = 13 |
|
|
~~消息通知(notification)
事件标签:notification
标签 |
含义 |
action |
动作:通知产生=1,通知弹出=2,通知点击=3,常驻通知展示(不重复上报,一天之内只报一次)=4 |
type |
通知id:预警通知=1,天气预报(早=2,晚=3),常驻=4 |
ap_time |
客户端弹出时间 |
content |
备用字段 |
~~用户前台活跃(active_foreground)
事件标签: active_foreground
标签 |
含义 |
push_id |
推送的消息的id,如果不是从推送消息打开,传空 |
access |
1.push 2.icon 3.其他 |
~~用户后台活跃(active_background)
事件标签: active_background
标签 |
含义 |
active_source |
1=upgrade,2=download(下载),3=plugin_upgrade |
~~评论(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 |
~~收藏(favorites)
序号 |
字段名称 |
字段描述 |
字段类型 |
长度 |
允许空 |
缺省值 |
1 |
id |
主键 |
int |
10,0 |
|
|
2 |
course_id |
商品id |
int |
10,0 |
√ |
0 |
3 |
userid |
用户ID |
int |
10,0 |
√ |
0 |
4 |
add_time |
创建时间 |
string |
√ |
|
|
~~点赞(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 |
|
√ |
|
~~错误日志
标签 |
含义 |
errorBrief |
错误摘要 |
errorDetail |
错误详情 |
~启动日志数据
事件标签: start
{
"action":"1",
"ar":"MX",
"ba":"HTC",
"detail":"",
"en":"start",
"entry":"2",
"extend1":"",
"g":"43R2SEQX@gmail.com",
"hw":"640*960",
"l":"en",
"la":"20.4",
"ln":"-99.3",
"loading_time":"2",
"md":"HTC-2",
"mid":"995",
"nw":"4G",
"open_ad_type":"2",
"os":"8.1.2",
"sr":"B",
"sv":"V2.0.6",
"t":"1561472502444",
"uid":"995",
"vc":"10",
"vn":"1.3.4"
}
标签 |
含义 |
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 |