数据仓库是保存数据,为企业提供数据支持
业务数据: 记录的是订单的信息!
行为数据: 记录的是下单的过程发生的信息!
是什么:
用户使用平台(电商)时产生的和电商的业务紧密相关(购买,下单,支付,收藏,搜索 )的数据!
产生:
用户在使用APP时,产生!
如何存:
关系型数据库
为什么:
事务是区分场景可以使用RDMS和NoSql的核心要素!
RDMS: OLTP(online transaction process)设计,重事务和在线处理!
NoSQL: 移动互联网时代诞生的。注重性能!性能强!
Hive 基于 OLAP(online analitic process)设计,注重查询!
是什么:
用于记录用户在使用平台APP时的各种操作,各种行为(启动,评论,收藏等)的数据!
产生:
户在使用APP时,产生!
如何存:
以日志文件的形式存储,其中以JSON格式记录!
为什么:
数据信息密集,价值低,记录周期长,结构复杂。
启动日志:
{ common:” xxx“
start:”xxxx“,
err:“xxx”,
ts:"启动行为发生的时间戳"
}
{
"common": {
"ar": "370000",
"ba": "Honor",
"ch": "wandoujia",
"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
}
{"common":{"ar":"420000","ba":"iPhone","ch":"Appstore","md":"iPhone 8","mid":"mid_991","os":"iOS 13.3.1","uid":"418","vc":"v2.1.134"},
"page":{"during_time":3336,"item":"3,7","item_type":"sku_ids","last_page_id":"trade","page_id":"payment"},"ts":1583769315209}
事件日志:
{
"common":{}
"actions":[
]
page:{},
err:{},
ts:xxx
}
{
"common": { -- 公共信息
"ar": "230000", -- 地区编码
"ba": "iPhone", -- 手机品牌
"ch": "Appstore", -- 渠道
"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 --出现顺序
},
{
"displayType": "promotion",
"item": "6",
"item_type": "sku_id",
"order": 2
},
{
"displayType": "promotion",
"item": "9",
"item_type": "sku_id",
"order": 3
},
{
"displayType": "recommend",
"item": "6",
"item_type": "sku_id",
"order": 4
},
{
"displayType": "query ",
"item": "6",
"item_type": "sku_id",
"order": 5
}
],
"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 --跳入时间戳
}
{"common":{"ar":"420000","ba":"iPhone","ch":"Appstore","md":"iPhone 8","mid":"mid_991","os":"iOS 13.3.1","uid":"418","vc":"v2.1.134"},"displays":[{"displayType":"promotion","item":"10","item_type":"sku_id","order":1},{"displayType":"query","item":"10","item_type":"sku_id","order":2},{"displayType":"query","item":"10","item_type":"sku_id","order":3},{"displayType":"promotion","item":"5","item_type":"sku_id","order":4},{"displayType":"query","item":"3","item_type":"sku_id","order":5},{"displayType":"query","item":"7","item_type":"sku_id","order":6},{"displayType":"query","item":"5","item_type":"sku_id","order":7},{"displayType":"recommend","item":"1","item_type":"sku_id","order":8},{"displayType":"query","item":"10","item_type":"sku_id","order":9},{"displayType":"query","item":"6","item_type":"sku_id","order":10}],"page":{"during_time":12161,"item":"2","item_type":"sku_id","last_page_id":"good_detail","page_id":"good_spec","sourceType":"query"},"ts":1583769287899}
日志数据的类型:
启动,曝光,动作,页面,错误!
业务数据要求:
①哪些表 23张表
②表的数据是怎么产生的?
③表是如何被更新的?会更新哪些字段?
④将表导入到HDFS上,使用的是什么策略?为什么?
业务数据: 如何导?为什么这么导?
使用sqoop 将 mysql中的数据直接导入到HDFS。
why Sqoop?
熟悉每一张表的导入方式!
select xxx from 表
select xxx from 表 where (date_format(create_time,'%Y-%m-%d')='$do_date'
select xxx from 表
where
(date_format(create_time,'%Y-%m-%d')='$do_date'
or
(date_format(operate_time,'%Y-%m-%d')='$do_date'
全量导和增量导的适用场景?
全量和增量只和数据量相关!
数据量小: 全量,增量
数据量大: 增量
如何区分哪些表的数据量小,哪些表数据量大?
表的性质分:
- 维度表: 描述事实的一个维度!
省份表! 地区表!
用户表!
商品表!
商品分类表!
数据量有限!事实表: 表中记录的数据是一个发生的事实! 3w(who when where) + 数量
下单,支付,评论
随着时间的推移,数据量不断增长!
事实表: 增量
维度表: 全量 、增量
日志数据:如何采集?
搭建两层flume的采集通道!哪两层?
1、日志服务器 --> kafka
2、kafka --> HDFS
sqoop: 使用场景单一! RDMS和HDFS互相导!
批处理!
flume: 场景丰富,支持多种数据源,可以传输到多种目的地!
流处理!
对接SparkStreaming实时分析,因此必须将数据先采集到Kafka!
优势:
①安全性和公司目前集群的规划设计考虑
②削峰
a) 第一层flume将数据写入到kafka,最终由第二层flume将数据采集到hdfs
实现了将 N个 第一层的flume agent进程直接请求HDFS到
由第二层 flume agent,统一请求,减少了在并发情况下,NN的请求负载!
b) 将数据先写入kafka,由第二层flume从kafka中读取数据,kafka启到缓冲作用
即使上游生产能力, 大于 第二层flume的消费能力,也不会丢失数据!
③分层解耦,方便维护