摘要

第一章 引言

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 系统架构

  1. 使用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

  1. HadoopApache旗下的开源软件平台,是一种分布式框架,可以利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。
  2. Hadoop的三个基本组件为:HDFS分布式文件系统,MapReduce分布式计算引擎,YARN资源调度器。广义的Hadoop还包含HiveHBaseFlumeKafkaSqoopSparkFlink等。
  3. CDHCloudera's Distribution including Apache Hadoop)是Hadoop的商业发行版之一,有版本清、晰稳的优点。本文将使用可视化管理界面Cloudera Manager(CM)安装CDH5.16.1。CM可以轻松部署各项大数据服务并管理依赖,通过CM提供的中央控制台,能实时监控主机和服务,还能对整个群集更改配置。

3.2.2 YARN

  1. YARN是基于MapReduce的作业调度与集群资源管理框架,为主从结构,包含ResourceManagerNodeManger等。

3.2.3 Zookeeper

  1. Zookeeper是一个开源的、高可用的、高性能的分布式应用程序协调服务。它提供了同步服务、命名服务、组服务、配置管理服务,也可以叫注册中心。它较好地解决了Hadoop中经常出现的死锁、竟态条件等问题,HDFSYARNHBase的高可用模式都会用到zookeeperKafka也会在zookeeper里注册brokertopicconsumer等。

3.2.4 HDFS

  1. HDFSHadoop Distributed File System)是一种通过网络实现文件在多台主机上进行分布式存储的文件系统,即可以将多台机器上的文件系统对外呈现为一个单独的文件系统,从而可以存储PB甚至EB级的数据。

3.2.5 Hive

  1. Hive是一种**数据仓库**,可以使用类SQL语言(Hive SQL)来协助读写,管理存储在分布式系统上的数据,HQL语句最终会转为运行在yarn上的MapReduce任务,适合离线分析。Hive也可以将计算引擎替换为Spark,使用Hive on Spark可以达到更高的计算效率。

3.2.6 Kafka

  1. Kafka 是分布式的流处理平台,也是一款发布订阅式的消息队列,具有高吞吐、可持久化、可水平扩展和支持流数据处理的特点。在本项目中起到**削峰填谷**,避免流量震荡、摧毁下游系统的作用;以及可以减少发送方和接收方的**耦合**程度,减少系统间不必要的交互。

3.2.7 Flume

  1. Flume是一种可分布式、可靠且高可用的服务,用于聚合和移动大量日志。它具有基于流数据的简单灵活架构,有故障转移和恢复机制,具有健壮性和容错性。本文将使用FlumeNginx的日志通过Kafka缓存导入HDFS

3.2.8 Sqoop

  1. Sqoop是一种工具,用于在HDFSHBaseHive和关系型数据库(如MySQL)之间高效导入导出批量数据。本文将使用SqoopHive中经过ETL的数据存入阿里云上的MySQL

3.3 Nginx

  1. Nginxengine x)是一款 HTTP 和反向代理服务器,由一个Master进程和多个Worker进程组成,其中Master负责读取配置文件和分配任务,Work正真负责处理请求。由于使用C语言开发,Nginx具有极致性能,10000个不活动的HTTP连接仅占用2.5MB内存。本文还将使用Nginx的反向代理功能,Nginx的反向代理具有负载均衡和容错的功能。

3.4 MySQL

  1. 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 发送数据

  1. IDEA中创建Maven项目,在pom文件中添加commons-httpclient的依赖,在build标签下添加maven-assembly-plugin插件,这样在构建时可以使用 `assembly:assembly` 命令将整个项目打成带有依赖的jar包。
  2. 编写Sender类:使用FileReaderBufferedReader逐行读取UserBehavior.csv,将每一行使用 `split(",")` 方法拆分,取出user_iditem_idcategory_idbehaviortimestamp,将他们拼接为URL,如:[http://192.168.3.206?user_id=181361&item_id=4662218&category_id=1320293&behavior=pv&timestamp=1512197536](http://192.168.3.206?user_id=181361&item_id=4662218&category_id=1320293&behavior=pv&timestamp=1512197536)

new 一个 GetMethod(URL) 对象,并使用 httpClient.executeMethod(getMethod) 发送请求。

4.3 Nginx

配置反向代理服务器:

配置业务服务器:

4.4 生产者Flume

自定义拦截器

4.5 Kafka

4.6 Hive

4.6.1 DataGrip配置

  1. 由于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 HiveUser DriverClassorg.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

人:当日下次数最多的人

一周内复购率最高的商品

结论及建议