1 数据仓库的概念

  • 数据仓库(Data Warehouse),是为企业所有决策制定过程,提供所有系统数据支持的战略集合。
  • 通过对数据仓库中数据的分析,可以帮助企业,改进业务流程、控制成本、题号提高产品质量等。
  • 数据仓科,并不是数据的最终目的地,而是为数据最终的目的地做好准备。这些准备包括对数据的:清洗、转义、分类、重组、合并、拆分、统计等等。

2 项目需求分析

  1. 用户行为数据采集平台搭建
  2. 业务数据采集平台搭建
  3. 数据仓库维度建模
  4. 分析:用户、流量、会员、商品、销售、地区、活动等电商核心主题,统计的报表指标近100个
  5. 采用即席查询工具,随时进行指标分析
  6. 对集群新能及逆行监控,发生异常需要报警
  7. 元数据管理
  8. 质量监控

3 项目框架

3.1 技术选型

需求可选技术框架
数据采集传输FlumeKafkaSqoopLogstashDataX
数据存储MySqlHDFSHBaseRedisMongoDB
数据计算HiveTezSparkFlinkStorm
数据查询PrestoDruidImpalaKylin
数据可视化EchartsSupersetQuickBIDataV
任务调度AzkabanOozie
集群监控Zabbix
元数据管理Atlas
数据质量监控Griffin

3.2 系统数据流程设计

3.3 框架版本选型

产品版本
Hadoop2.7.2
Flume1.7.0
Kafka0.11.0.2
Hive2.3
Sqoop1.4.6
MySql5.6.24
Azkaban2.5.0
Java1.8
Zookeeper3.4.10
Presto0.189

3.4 服务器选型

  • 本地搭建3台Centos6虚拟机(4g内存 40g硬盘)

3.5 集群资源规划设计

3.5.1 集群规模计算

  1. 每天日活用户100万,每人一天平均生产100条:100万*100条=1亿条
  2. 每条日志1kb左右,每天1亿条:100000000/1024/1024=100G
  3. 半年内不扩容:100G*180=18T
  4. 保存3个副本:18T*3=54T
  5. 预留20%~30%=54T/0.7=77T
  6. 共计8T*10台服务器(128G内存,8T硬盘)

3.5.2 本地测试集群服务器规划

服务名称子服务hadoop102hadoop103hadoop104
HDFSNameNode
DataNode
SecondaryNameNode
YarnNodeManager
ResourceManager
ZookeeperZookeeper Server
Flume(日志采集)Flume
KafkaKafka
Flume(消费Kafka)Flume
HiveHive
MySqlMySql
SqoopSqoop
PrestoCoordinator
Worker
AzkabanAzkaban WebServer
AzkabanExecutorServer
DruidDruid
Kylin
HBaseHMaster
HRegionServer
Superset
Atlas
SolrJar
Griffin
服务数总计 1999
  • 注意:HDFS的NameNodeSecondaryNameNode和Yarn的ResourceManager要配置在不同的服务器中,因为都很耗内存

4 数据生成

4.1 埋点数据基本格式

  • 公共字段:基本所有手机都包含的字段
  • 业务字段:埋点上报的字段,有具体的业务类型
1587692644625 | {
    "cm": { //公共字段
        "ln": "-66.7", //double lng经度
        "sv": "V2.0.1", //String sdkVersion
        "os": "8.1.7",
        "g": "50F3N8XP@gmail.com", //String gmail
        "mid": "998", //String 设备唯一id
        "nw": "3G", //String 网络模式
        "l": "en", //String language 系统语言
        "vc": "18", //String versionCode 程序版本号
        "hw": "750*1134", //String height width 屏幕宽高
        "ar": "MX", //String area 区域
        "uid": "998", //String 用户标识
        "t": "1587650831270", //String 客户端日志产生时的事件
        "la": "5.2", //double lat纬度
        "md": "HTC-16", //String model 手机型号
        "vn": "1.3.1", //String versionName 程序版本名
        "ba": "HTC", //String brand 手机品牌
        "sr": "N" //String source 渠道号,应用从哪个渠道来的
    },
    "ap": "app", //项目数据来源 app pc
    "et": [{ //事件
        "ett": "1587626436201", //客户端事件产生时间
        "en": "loading", //事件名称
        "kv": { //事件结果,key-value
            "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
contentTypeType: 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_source1=upgrade,2=download(下载),3=plugin_upgrade

4.2.7 评论 comment

序号字段名称字段描述字段类型长度允许空缺省值
1comment_id评论表int10,0
2userid用户 idint10,00
3p_comment_id父级评论 id(为 0 则是一级评论,不 为 0 则是回复)int10,0
4content评论内容string1000
5addtime创建时间string
6other_id评论的相关 idint10,0
7praise_count点赞数量int10,00
8reply_count回复数量int10,00

4.2.8 收藏 favorates

序号字段名称字段描述字段类型长度允许空缺省值
1id主键int10,0
2course_id商品 idint10,00
3userid用户 IDint10,00
4add_time创建时间string

4.2.9 点赞 praise

序号字段名称字段描述字段类型长度允许空缺省值
1id主键 idint10,0
2userid用户 idint10,0
3target_id点赞的对象 idint10,0
4type点赞类型 1 问答点赞 2 问答评论点赞 3 文章点赞数 4 评论点赞int10,0
5add_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
Last modification:April 24th, 2020 at 10:23 am