热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1.用户行为采集平台概述

1.用户行为采集平台概述数据仓库概念项目需求及架构设计项目需求分析项目框架技术选型系统数据流程设计框架版本选型服务器选型集群资源规划设计用户行为日志用户行为日志概述用户行为日志内容

1. 用户行为采集平台概述

  • 数据仓库概念
  • 项目需求及架构设计
    • 项目需求分析
    • 项目框架
      • 技术选型
      • 系统数据流程设计
      • 框架版本选型
      • 服务器选型
      • 集群资源规划设计
  • 用户行为日志
    • 用户行为日志概述
    • 用户行为日志内容
      • 页面浏览记录
      • 动作记录
      • 曝光记录
      • 启动记录
      • 错误记录
    • 用户行为日志格式
      • 页面日志
      • 启动日志
    • 模拟生成用户行为日志
      • 环境准备
      • 模拟数据


数据仓库概念

数据仓库(Data Warehouse )是为企业所有决策制定过程,提供所有系统数据的战略集合

通过对数据仓库中数据的分析,可以帮助企业,改进业务、控制成本、提高产品质量等。

数据仓库,并不是数据的最终目的地,而是为数据最终的目的地做好准备。

这些准备包括对数据的:

  • 清洗
  • 转义
  • 分类
  • 重组
  • 合并
  • 拆分
  • 统计

在这里插入图片描述

项目需求及架构设计

项目需求分析

项目需求 :

  • 用户行为数据采集平台搭建
  • 业务数据采集平台搭建
  • 数据仓库维度建模
  • 分析,设备、会员、商品、地区、活动等电商核心主题,统计的报表指标近100个
  • 采用即席查询工具,随时进行指标分析
  • 对集群性能进行监控,发生异常需要报警
  • 元数据管理
  • 质量监控

项目框架


技术选型

数据采集传输:Flume,DataX , Maxwell , Kafka , Sqoop

数据存储:MySql ,HDFS,HBase,Redis , MongoDB

数据计算:Hive,Spark,Flink , Tez , Strom

数据查询:Presto,Kylin,Impala , DataX

数据可视化:Superset , QuickBI , DataV

任务调度:DolphinScheduler、Azkaban、Oozie

集群监控:Zabbix

元数据管理:Atlas

系统数据流程设计

在这里插入图片描述

业务交互数据:业务流程中产生的登录、订单、用户、商品、支付等相关的数据,通常存储在 DB 中,如 : Mysql、Oracle

埋点用户行为数据 : 用户在使用产品过程中 ,与客户端产品交互程中产生的数据 , 如 : 页面浏览、点击、停留、评论、点赞、收藏

框架版本选型

Apache:运维麻烦,组件间兼容性需要自己调研。(一般大厂使用,技术实力雄厚,有专业的运维人员)(建议使用)

CDH::国内使用最多的版本,但CM不开源,今年开始要收费,一个节点1万美金

HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少

产品版本
Java1.8
Hadoop3.1.3
Hive3.1.2
Flume1.9.0
Zookeeper3.5.7
Kafka2.4.1
DataX3.0
Maxwell1.29.2

框架选型尽量不要选择最新的框架 , 选择最新框架半年前左右的稳定版


服务器选型

物理机:

  • 以128G内存,20核物理CPU,40线程,8THDD和2TSSD硬盘,戴尔品牌单台报价4W出头。一般物理机寿命5年左右
  • 需要有专业的运维人员,平均一个月1万。电费也是不少的开销

云主机:

  • 以阿里云为例,差不多相同配置,每年5W,主要磁盘贵
  • 很多运维工作都由阿里云完成,运维相对较轻松

企业选择 :

  • 金融有钱公司和阿里没有直接冲突的公司选择阿里云
  • 中小公司、为了融资上市,选择阿里云,拉倒融资后买物理机
  • 有长期打算,资金比较足,选择物理机

集群资源规划设计

(假设:每台服务器 8T 磁盘,128G 内存)

  • 每天日活跃用户 100 万,每人一天平均 100 条:100万 * 100条 = 1亿条
  • 每条日志 1K 左右,每天 1 亿条:100000000 / 1024 / 1024 = 约100G
  • 半年内不扩容服务器来算:100G * 180天 = 约18T
  • 保存 3 副本:18T * 3 = 54T
  • 预留20% 30%Buf = 54T / 0.7 = 77T

约 8T * 10 台服务器

集群服务器规划 :

服务名称子服务服务器 cpucode101服务器 cpucode102服务器 cpucode103
HDFSNameNode
DataNode
SecondaryNameNode
YarnNodeManager
Resourcemanager
ZookeeperZookeeper Server
Flume(采集日志)Flume
Flume(消费Kafka)Flume
KafkaKafka
HiveHive
MySQLMySQL
DataXDataX
MaxwellMaxwell
PrestoCoordinator
Worker
DolphinSchedulerMasterServer
WorkerServer
DruidDruid
Kylin
HbaseHMaster
HRegionServer
Superset
Atlas
SolrJar

用户行为日志

用户行为日志概述

用户行为日志的内容 : 用户的各项行为信息以及行为所处的环境信息

收集信息的目的 : 优化产品和为各项分析统计指标提供数据支撑

收集这些信息的手段 : 埋点

埋点方式 :

  • 有代码埋点(前端/后端)
  • 可视化埋点
  • 全埋点

代码埋点 : 通过调用埋点SDK函数,在需要埋点的业务逻辑功能位置调用接口,上报埋点数据。如 : 我们对页面中的某个按钮埋点后,当这个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口,来发送数据 ( 业务处理 )

可视化埋点 : 只需要研发人员集成采集 SDK,不需要写埋点代码,业务人员就可以通过访问分析平台的“圈选”功能,来“圈”出需要对用户行为进行捕捉的控件,并对该事件进行命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送 ( 花钱 )

全埋点 : 通过在产品中嵌入SDK,前端自动采集页面上的全部用户行为事件,上报埋点数据,相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析 ( 大公司 )

用户行为日志内容

收集和分析的用户行为信息 :

  • 页面浏览记录
  • 动作记录
  • 曝光记录
  • 启动记录
  • 错误记录

页面浏览记录

页面浏览记录 : 记录访客对页面的浏览行为

浏览行为的环境信息 :

  • 用户信息
  • 时间信息
  • 地理位置信息
  • 设备信息
  • 应用信息
  • 渠道信息
  • 页面信息

用户信息包括用户ID、设备ID
时间信息用户跳入页面的时间
地理位置信息用户浏览页面时所处的地理位置
设备信息包括设备品牌、设备型号、设备系统
应用信息指用户访问的应用信息,例如应用版本
渠道信息指应用的下载渠道
页面信息用户浏览的页面相关信息,包括页面ID,页面对象

动作记录

动作记录 : 记录的是用户的业务操作行为

业务操作行为的环境信息 :

  • 用户信息
  • 时间信息
  • 地理位置信息
  • 设备信息
  • 应用信息
  • 渠道信息
  • 动作目标对象信息

用户信息包括用户ID、设备ID
时间信息动作时间
地理位置信息动作发生时所处的地理位置
设备信息设备品牌、设备型号、设备系统
应用信息用户访问的应用信息,例如应用版本
渠道信息应用的下载渠道
动作目标信息动作目标对象相关信息,包括对象类型,对象ID

曝光记录

曝光记录 : 曝光行为

曝光行为的环境信息 :

  • 用户信息
  • 时间信息
  • 地理位置信息
  • 设备信息
  • 应用信息
  • 渠道信息
  • 曝光对象信息等

用户信息包括甲户ID、设备ID
时间信息曝光时间
地理位置信息曝光行为发生时所处的地理位置
设备信息设备品牌、设备型号、设备系统
应用信息用户访问的应用信息,例如应用版本
渠道信息指应用的下载渠道
曝光对象信息曝光对象相关信息,包括对象类型,对象ID

启动记录

启动记录 : 用户启动应用的行为

启动行为的环境信息 :

  • 用户信息
  • 时间信息
  • 地理位置信息
  • 设备信息
  • 应用信息
  • 渠道信息
  • 启动类型
  • 开屏广告信息

用户信息用户ID、设备ID
时间信息启动时间
地理位置信息启动时所处的地理位置
设备信息设备品牌、设备型号、设备系统
应用信息用户访问的应用信息,例如应用版本
渠道信息应用的下载渠道
启动类型图标和推送
开屏广告信息广告ID等信息

错误记录

错误记录 : 记录用户在使用应用过程中的报错行为

报错行为的环境信息 :

  • 用户信息
  • 时间信息
  • 地理位置信息
  • 设备信息
  • 应用信息
  • 渠道信息
  • 可能与报错相关的页面信息
  • 动作信息
  • 曝光信息
  • 动作信息

用户行为日志格式

日志结构分为两类 :

  • 页面日志
  • 启动日志

页面日志

页面日志 : 以页面浏览为单位,即一个页面浏览记录,生成一条页面埋点日志

一条完整的页面日志包含,一个页面浏览记录,若干个用户在该页面所做的动作记录,若干个该页面的曝光记录,以及一个在该页面发生的报错记录

页面日志环境信息 :

  • 用户信息
  • 时间信息
  • 地理位置信息
  • 设备信息
  • 应用信息
  • 渠道信息

{"common": { -- 环境信息"ar": "230000", -- 地区编码"ba": "iPhone", -- 手机品牌"ch": "Appstore", -- 渠道"is_new": "1", --是否首日使用,首次使用的当日,该字段值为1,过了24:00,该字段置为0"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, --出现顺序"pos_id": 2 --曝光位置},{"displayType": "promotion","item": "6","item_type": "sku_id","order": 2, "pos_id": 1},{"displayType": "promotion","item": "9","item_type": "sku_id","order": 3, "pos_id": 3},{"displayType": "recommend","item": "6","item_type": "sku_id","order": 4, "pos_id": 2},{"displayType": "query ","item": "6","item_type": "sku_id","order": 5, "pos_id": 1}],"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": "370000","ba": "Honor","ch": "wandoujia","is_new": "1","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
}

模拟生成用户行为日志


环境准备

JDK准备

卸载现有JDK(3台节点)

sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps

在 Linux 系统下的 opt 目录中查看软件包是否导入成功

ls /opt/software/

解压 JDK 到 /opt/module 目录下

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

在这里插入图片描述

配置JDK环境变量

新建 /etc/profile.d/my_env.sh 文件

sudo vim /etc/profile.d/my_env.sh

添加如下内容,然后保存(:wq)退出

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

在这里插入图片描述

让环境变量生效

source /etc/profile.d/my_env.sh

测试JDK是否安装成功

java -version

在这里插入图片描述

分发JDK

xsync /opt/module/jdk1.8.0_212/

分发环境变量配置文件

sudo /home/cpu/bin/xsync /etc/profile.d/my_env.sh

分别在 cpucode102、cpucode103 上执行 source

source /etc/profile.d/my_env.sh

环境变量配置说明

Linux 的环境变量可在多个文件中配置 :

  • /etc/profile
  • /etc/profile.d/*.sh
  • ~/.bashrc
  • ~/.bash_profile

bash的运行模式 :

  • login shell : 通过终端,输入用户名、密码,登录系统
  • non-login shell

login shell 启动时会加载 /etc/profile ,~/.bash_profile ,~/.bashrc

non-login shell 启动时会加载 ~/.bashrc

模拟数据

上传模拟器

application.ymlgmall2020-mock-log-2021-10-10.jarpath.jsonlogback.xml 上传到 cpucode101/opt/module/applog 目录下

创建 applog 路径

mkdir /opt/module/applog

在这里插入图片描述

在这里插入图片描述

配置文件说明

  • application.yml文件

根据需求生成对应日期的用户行为日志

# 外部配置打开
logging.config: "./logback.xml"
#业务日期
mock.date: "2020-06-14"#模拟数据发送模式
mock.type: "log"
#mock.type: "http"
#mock.type: "kafka"#http模式下,发送的地址
mock.url: "http://localhost:8090/applog"mock:kafka-server: "hdp1:9092,hdp2:9092,hdp3:9092"kafka-topic: "ODS_BASE_LOG"#启动次数
mock.startup.count: 200#设备最大值
mock.max.mid: 1000000#会员最大值
mock.max.uid: 1000#商品最大值
mock.max.sku-id: 35#页面平均访问时间
mock.page.during-time-ms: 20000#错误概率 百分比
mock.error.rate: 3#每条日志发送延迟 ms
mock.log.sleep: 20#商品详情来源 用户查询,商品推广,智能推荐, 促销活动
mock.detail.source-type-rate: "40:25:15:20"#领取购物券概率
mock.if_get_coupon_rate: 75#购物券最大id
mock.max.coupon-id: 3#搜索关键词
mock.search.keyword: "图书,小米,iphone11,电视,口红,ps5,苹果手机,小米盒子"# 男女浏览商品比重(35sku)
mock.sku-weight.male: "10:10:10:10:10:10:10:5:5:5:5:5:10:10:10:10:12:12:12:12:12:5:5:5:5:3:3:3:3:3:3:3:3:10:10"
mock.sku-weight.female: "1:1:1:1:1:1:1:5:5:5:5:5:1:1:1:1:2:2:2:2:2:8:8:8:8:15:15:15:15:15:15:15:15:1:1"

  • path.json

配置访问路径,可以根据需求,灵活配置用户访问路径

[{"path":["home","good_list","good_detail","cart","trade","payment"],"rate":20 },{"path":["home","search","good_list","good_detail","login","good_detail","cart","trade","payment"],"rate":30 },{"path":["home","search","good_list","good_detail","login","register","good_detail","cart","trade","payment"],"rate":20 },{"path":["home","mine","orders_unpaid","trade","payment"],"rate":10 },{"path":["home","mine","orders_unpaid","good_detail","good_spec","comment","trade","payment"],"rate":5 },{"path":["home","mine","orders_unpaid","good_detail","good_spec","comment","home"],"rate":5 },{"path":["home","good_detail"],"rate":20 },{"path":["home" ],"rate":10 }
]

  • logback配置文件

可配置日志生成路径


<configuration><property name&#61;"LOG_HOME" value&#61;"/opt/module/applog/log" /><appender name&#61;"console" class&#61;"ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%msg%npattern>encoder>appender><appender name&#61;"rollingFile" class&#61;"ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class&#61;"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.logfileNamePattern>rollingPolicy><encoder><pattern>%msg%npattern>encoder>appender><logger name&#61;"com.atguigu.gmall2020.mock.log.util.LogUtil"level&#61;"INFO" additivity&#61;"false"><appender-ref ref&#61;"rollingFile" /><appender-ref ref&#61;"console" />logger><root level&#61;"error" ><appender-ref ref&#61;"console" />root>
configuration>

生成日志

进入到 /opt/module/applog 路径&#xff0c;执行以下命令

java -jar gmall2020-mock-log-2021-10-10.jar

在这里插入图片描述

/opt/module/applog/log 目录下查看生成日志

ll

在这里插入图片描述

集群日志生成脚本

查看环境变量

echo $PATH

在这里插入图片描述

/usr/local/sbin 目录下创建脚本 lg.sh

在脚本中编写如下内容

#!/bin/bash
for i in cpucode101 cpucode102; doecho "&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61; $i &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;"ssh $i "cd /opt/module/applog/; nohup java -jar gmall2020-mock-log-2021-10-10.jar >/dev/null 2>&1 &"
done

在这里插入图片描述

  • /opt/module/applog/为jar包及配置文件所在路径
  • /dev/null 代表 linux 的空设备文件&#xff0c;所有往这个文件里面写入的内容都会丢失&#xff0c;俗称“黑洞”

标准输入0&#xff1a;从键盘获得输入 /proc/self/fd/0

标准输出1&#xff1a;输出到屏幕&#xff08;即控制台&#xff09; /proc/self/fd/1

错误输出2&#xff1a;输出到屏幕&#xff08;即控制台&#xff09; /proc/self/fd/2

修改脚本执行权限

chmod 777 lg.sh

在这里插入图片描述

将 jar 包及配置文件上传至 cpucode102 的 /opt/module/applog/ 路径

在这里插入图片描述

启动脚本

lg.sh

在这里插入图片描述

分别在 cpucode101、cpucode102 的 /opt/module/applog/log 目录上查看生成的数据

在这里插入图片描述

在这里插入图片描述

用户行为采集平台搭建 :

https://blog.csdn.net/qq_44226094/article/details/122915599


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 本文介绍了如何使用Hive分析用户最长连续登录天数的方法。首先对数据进行排序,然后计算相邻日期之间的差值,接着按用户ID分组并累加连续登录天数,最后求出每个用户的最大连续登录天数。此外,还探讨了该方法在其他领域的应用,如股票市场中最大连续涨停天数的分析。 ... [详细]
author-avatar
骑着羊赶着狼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有