摘要
第一章 引言
1.1 选题背景和意义
数据时代,海量数据……
1.2 国内外研究现状
基本是抄的,要降重
1.3 本文主要工作
本文将根据阿里开源的电商用户行为数据集UserBehavior.csv,提出合理的需求、并搭建ETL平台,实现对本数据集的多维度分析。
第二章 需求分析
3.1 数据来源
UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集。
本数据集包含在2017年11月25日到2017年12月3日(有脏数据)之间,约一百万用户的所有行为(包括点击、收藏、加购物车、购买)。数据集的每一行表示一条用户行为,由用户ID、商品ID、商品种类ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
列名称 | 说明 |
---|---|
user_id | 整型,脱敏后的用户ID |
item_id | 整型,脱敏后的商品ID |
category_id | 整型,脱敏后的商品种类ID |
behavior | 字符串,为(‘pv’, ‘fav’, ‘cart’, ‘buy’)中的一个 |
timestamp | 整型,发生行为的时间戳(以秒为单位) |
3.2 需求
意义:数据备份、辅助决策
电商:对淘宝用户行为的分析,如购买时段的分析、热销商品的分析、用户行为转化漏斗分析以及通过RFM模型对用户进行分类等,希望从中探索用户购买的规律,并将这些规律与店铺营销策略相结合,以实现更精细和精准的运营,让业务获得更好的增长。
3.3 分析维度
https://www.cnblogs.com/Jacon-hunt/p/11345839.html
第一个维度:用户购物情况整体分析
以PV、UV、平均访问量、跳失率等指标,分析用户最活跃的日期及活跃时段,了解用户行为习惯
第二个维度:商品购买情况分析
从成交量、人均购买次数、复购率等指标,探索用户对商品的购买偏好,了解商品的销售规律
第三个维度:用户行为转化漏斗分析
从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析
第四个维度:参照RFM模型,对用户进行分类,找出有价值的用户
第三章 系统设计与相关技术
3.0 系统架构
使用Java的逐行读取UserBehavior.csv里的数据,将包含用户ID、商品ID、商品种类ID、行为类型和时间戳的消息使用Get请求发送给一台Nginx负载均衡服务器,业务服务器收到来自负载均衡服务器的Get请求,生成日志,存放在`/logs/access.log`里,生产者Flume监控`access.log`,将清洗后的日志写入Kafka,消费者Flume消费Kafka里的数据,修正时间戳后按照日期存入HDFS。创建Hive外部表ODS_log关联HDFS上的数据,进行ETL操作,将ETL后产生的新表通过Sqoop导入MySQL,使用Sugar BI连接MySQL进行报表展示。
3.1 操作系统
物理设备:装有Windows10专业工作站版系统的 Dell G3笔记本一台,搭载Inter i7-8750h处理器,6核心12线程;20G非对称双通道内存(4G+16G);512G PCIE3.0协议固态硬盘,最高读写速度可达1000MB/S以上。用于安装VMware虚拟机和使用IDE开发代码。
VMware虚拟机:三台装有CentOS 7.6的虚拟机,分别为Master、Node01、Node02。其中,Master节点的配置为4核8G,Node节点的配置为2核4G,三个节点的硬盘均为100G,由于VMware支持动态分配磁盘,因此不会瞬间占满物理磁盘的空间。
云服务器:一台装有CentOS 7.6的阿里云ESC,1核2G,1M带宽。具有公网IP,安装MySQL,作为Sugar BI的数据源。
3.2 Cloudera CDH
3.2.1 Hadoop、CDH和CM
Hadoop是Apache旗下的开源软件平台,是一种分布式框架,可以利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。
Hadoop的三个基本组件为:HDFS分布式文件系统,MapReduce分布式计算引擎,YARN资源调度器。广义的Hadoop还包含Hive、HBase、Flume、Kafka、Sqoop、Spark、Flink等。
CDH(Cloudera's Distribution including Apache Hadoop)是Hadoop的商业发行版之一,有版本清、晰稳的优点。本文将使用可视化管理界面Cloudera Manager(CM)安装CDH5.16.1。CM可以轻松部署各项大数据服务并管理依赖,通过CM提供的中央控制台,能实时监控主机和服务,还能对整个群集更改配置。
3.2.2 YARN
YARN是基于MapReduce的作业调度与集群资源管理框架,为主从结构,包含ResourceManager和NodeManger等。
3.2.3 Zookeeper
Zookeeper是一个开源的、高可用的、高性能的分布式应用程序协调服务。它提供了同步服务、命名服务、组服务、配置管理服务,也可以叫注册中心。它较好地解决了Hadoop中经常出现的死锁、竟态条件等问题,HDFS、YARN、HBase的高可用模式都会用到zookeeper,Kafka也会在zookeeper里注册broker、topic和consumer等。
3.2.4 HDFS
HDFS(Hadoop Distributed File System)是一种通过网络实现文件在多台主机上进行分布式存储的文件系统,即可以将多台机器上的文件系统对外呈现为一个单独的文件系统,从而可以存储PB甚至EB级的数据。
3.2.5 Hive
Hive是一种**数据仓库**,可以使用类SQL语言(Hive SQL)来协助读写,管理存储在分布式系统上的数据,HQL语句最终会转为运行在yarn上的MapReduce任务,适合离线分析。Hive也可以将计算引擎替换为Spark,使用Hive on Spark可以达到更高的计算效率。
3.2.6 Kafka
Kafka 是分布式的流处理平台,也是一款发布订阅式的消息队列,具有高吞吐、可持久化、可水平扩展和支持流数据处理的特点。在本项目中起到**削峰填谷**,避免流量震荡、摧毁下游系统的作用;以及可以减少发送方和接收方的**耦合**程度,减少系统间不必要的交互。
3.2.7 Flume
Flume是一种可分布式、可靠且高可用的服务,用于聚合和移动大量日志。它具有基于流数据的简单灵活架构,有故障转移和恢复机制,具有健壮性和容错性。本文将使用Flume将Nginx的日志通过Kafka缓存导入HDFS。
3.2.8 Sqoop
Sqoop是一种工具,用于在HDFS、HBase、Hive和关系型数据库(如MySQL)之间高效导入导出批量数据。本文将使用Sqoop把Hive中经过ETL的数据存入阿里云上的MySQL。
3.3 Nginx
Nginx(engine x)是一款 HTTP 和反向代理服务器,由一个Master进程和多个Worker进程组成,其中Master负责读取配置文件和分配任务,Work正真负责处理请求。由于使用C语言开发,Nginx具有极致性能,10000个不活动的HTTP连接仅占用2.5MB内存。本文还将使用Nginx的反向代理功能,Nginx的反向代理具有负载均衡和容错的功能。
3.4 MySQL
MySQL是一款关系型数据库,在本项目中作为Hive的元数据库(Hive Metastore),还存储数仓建模中ADS层的数据,作为Sugar BI的数据源。
3.5 IDE
JetBrains IntelliJ IDEA:在JetBrains公司官网使用校园邮箱申请教育许可证,从而可以免费使用IDEA专业版,其内部整合了Maven、Git、Docker、Spring、Java EE等组件,GUI人性化,代码提示智能,是公认的最好用的Java开发工具。
JetBrains DataGrip:相比Navicat,额外支持了许多大数据领域的数据库或数据仓库,如Hive、H2、Derby、ClickHouse、Elasticsearch等。
第四章 实现
4.1 搭建CDH集群
4.1.1 通用的集群准备工作
- 修改主机名:使用
hostnamectl
命令,将三台机器分别命名为Master、Node01、Node02。 - 修改Hosts:在
/etc/hosts
文件追加三行,格式为:主机名 空格 IP地址。 - ssh免密:在
~/.ssh/
目录下执行ssh-keygen -t rsa
生成密钥,拷贝id_rsa.pub里的公钥,将三条公钥汇总,并拷贝到每台机器的authorized_keys文件里面,即可实现免密登录。 - 关闭防火墙、selinux、Network Manager、swap和虚拟内存。
- 使用
crontab -e
添加0 * * * * ntpdate -u ntp.aliyun.com
每小时向ntp服务器同步一次时间 - 分别将jdk8和jdk11解压到
/usr/java/
目录下,并在/etc/profile
里配置jdk8,source/etc/profile
4.1.2 安装、配置、启动 Cloudera Manager
4.2 发送数据
在IDEA中创建Maven项目,在pom文件中添加commons-httpclient的依赖,在build标签下添加maven-assembly-plugin插件,这样在构建时可以使用 `assembly:assembly` 命令将整个项目打成带有依赖的jar包。
编写Sender类:使用FileReader和BufferedReader逐行读取UserBehavior.csv,将每一行使用 `split(",")` 方法拆分,取出user_id、item_id、category_id、behavior和timestamp,将他们拼接为URL,如:[http://192.168.3.206?user_id=181361&item_id=4662218&category_id=1320293&behavior=pv×tamp=1512197536](http://192.168.3.206?user_id=181361&item_id=4662218&category_id=1320293&behavior=pv×tamp=1512197536)
new 一个 GetMethod(URL) 对象,并使用 httpClient.executeMethod(getMethod)
发送请求。
4.3 Nginx
配置反向代理服务器:
配置业务服务器:
4.4 生产者Flume
自定义拦截器
4.5 Kafka
4.6 Hive
4.6.1 DataGrip配置
由于DataGrip内置的jdbc HiveDriver版本为3.1.2,与集群中的Hive版本不匹配,无法连接,因此使用自定义Driver。将Master节点 `/opt/cloudera/parcels/CDH/jars/` 目录下的`hive-jdbc-1.1.0-cdh5.16.1.jar`拷贝到Windows下,在DataGrip里新建名为CDH Hive的User Driver,Class为org.apache.hive.jdbc.HiveDriver。指定Driver Files为刚才拷贝的jar包,指定URL `jdbc:hive2://192.168.3.208:10000` (Hiveserver2所在节点的IP和端口),即可连接到Hive。
4.6.2 ODS层
4.7 MySQL
4.8 Sugar BI
4.9 完整启动流程,用Airflow实现自动化调度
第五章 总结
趋势:pv、cart、fav、buy随时间变化趋势(按天、小时统计)四根折线图
转化率最高的商品:pv数÷buy数
复购率统计口径:有复购行为的用户数 / 有购买行为的用户数 可以选出复购率前10的商品
周留存率、日留存率
商品:当日pv、cart、fav、buy最多商品,TOP20
分类:当日最火分类 TOP20
人:当日下次数最多的人
一周内复购率最高的商品
结论及建议