大数据项目之数据采集总结(三)

一、数据采集项目总结

1.数据仓库

数据仓库是保存数据,为企业提供数据支持

2.数据的分类

业务数据: 记录的是订单的信息!

​ 行为数据: 记录的是下单的过程发生的信息!

2.1用户业务数据

是什么:

用户使用平台(电商)时产生的和电商的业务紧密相关(购买,下单,支付,收藏,搜索 )的数据!

产生:

用户在使用APP时,产生!

如何存:

关系型数据库

为什么:

事务是区分场景可以使用RDMS和NoSql的核心要素!
RDMS: OLTP(online transaction process)设计,重事务和在线处理!
NoSQL: 移动互联网时代诞生的。注重性能!性能强!
Hive 基于 OLAP(online analitic process)设计,注重查询!

2.2 用户行为数据

是什么:

用于记录用户在使用平台APP时的各种操作,各种行为(启动,评论,收藏等)的数据!

产生:

户在使用APP时,产生!

如何存:

以日志文件的形式存储,其中以JSON格式记录!

为什么:

数据信息密集,价值低,记录周期长,结构复杂。

3.数据示例

3.1 日志数据实例

启动日志:

{ 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上,使用的是什么策略?为什么?

4.采集平台

4.1 采集的方式

业务数据: 如何导?为什么这么导?

使用sqoop 将 mysql中的数据直接导入到HDFS。

why Sqoop?

  • 业务场景符合!
  • 批处理场景!
  • 开源免费,用户多,社区活跃!

熟悉每一张表的导入方式!

  • 每日全量: 导入表的全部数据
select  xxx  from
  • 每日增量(只导新增):
select  xxx  fromwhere (date_format(create_time,'%Y-%m-%d')='$do_date'
  • 每日新增和变化(只导当天新增和当天变化的数据):

select  xxx  fromwhere
(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

4.2 flume和sqoop的区别?

sqoop:   使用场景单一!  RDMS和HDFS互相导!
		 批处理!

flume:   场景丰富,支持多种数据源,可以传输到多种目的地!
		 流处理!

4.3 为什么要双层Flume?

 对接SparkStreaming实时分析,因此必须将数据先采集到Kafka!

优势:

①安全性和公司目前集群的规划设计考虑
②削峰  
  a)  第一层flume将数据写入到kafka,最终由第二层flume将数据采集到hdfs
      实现了将 N个 第一层的flume agent进程直接请求HDFS到
   	  由第二层 flume agent,统一请求,减少了在并发情况下,NN的请求负载!
  b) 将数据先写入kafka,由第二层flume从kafka中读取数据,kafka启到缓冲作用
	 即使上游生产能力, 大于 第二层flume的消费能力,也不会丢失数据!
③分层解耦,方便维护

猜你喜欢

转载自blog.csdn.net/qq_38705144/article/details/114041723
今日推荐