电商分析平台是对用户访问电商平台的行为进行分析。
1.1 项目简介
本项目主要讲解一个大型电商网站后台的企业级大数据统计分析平台,该平台以 Spark 为主,对电商网站的流量进行离线和实时的分析。
该大数据分析平台对电商网站的各类用户行为(访问行为、购物行为、广告点击行为等)进行复杂的分析。用统计分析出来的数据,辅助公司中的 PM(产品经理)、数据分析师以及管理人员分析现有产品的状况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务。最终达到用大数据技术来帮助提高公司的业绩、营业额以及市场占有率的目标。
项目主要使用了 Spark 技术生态栈中最经常使用的三个技术框架,、 和 ,进行离线计算和实时计算业务模块的开发。实现了包括用户访问 session 分析、页面单跳转化率统计、热门商品离线统计、广告流量实时统计 4 个业务模块。
项目中全部的业务功能模块都是直接从实际企业项目中抽取出来的,业务复杂度没有任何缩水,经过合理的将实际业务模块进行技术整合与改造,该项目几乎彻底涵盖了 Spark Core、Spark SQL 和 Spark Streaming 这三个技术框架中大部分的功能点、知识点。mysql
1.2 项目目标
一、掌握电商系统中 Spark 的主要使用场景以及建设流程。
二、掌握企业级的 Spark 项目的复杂性能调优、线上故障解决经验、数据倾斜全套处理方案。
三、经过项目实战,彻底将 Spark 全部技术点和知识点都应用在项目中,掌握如何灵活应用 Spark 各项技术来实现各类复杂业务需求。nginx
1.3 业务需求简介
1.3.1 用户访问 session 统计
用户在电商网站上,一般会有不少的访问行为,一般都是进入首页,而后可能点击首页上的一些商品,点击首页上的一些品类,也可能随时在搜索框里面搜索关键词,还可能将一些商品加入购物车,对购物车中的多个商品下订单,最后对订单中的多个商品进行支付。
用户的每一次操做,其实能够理解为一个 action,在本项目中,咱们关注、、、这四个用户行为。
用户 session,是在电商平台的角度定义的会话概念,指的就是,从用户第一次进入首页,session 就开始了。而后在必定时间范围内,直到最后操做完(可能作了几十次、甚至上百次操做),离开网站,关闭浏览器,或者长时间没有作操做,那么 session 就结束了。
。简单理解,session 就是某一天某一个时间段内,某个用户对网站从打开/进入,到作了大量操做,到最后关闭浏览器的过程,就叫作 session。
session 实际上就是一个电商网站中最基本的数据。那么面向消费者/用户端的大数据分析(C端),最基本的就是面向用户访问行为/用户访问 session 的分析。
该模块主要是对用户访问 session 进行统计分析,包括 。该模块可让产品经理、数据分析师以及企业管理层形象地看到各类条件下的具体用户行为以及统计指标,从而对公司的产品设计以及业务发展战略作出调整。主要使用 Spark Core 实现。web
1.3.2 页面单跳转化率统计
页面单跳转化率是一个很是有用的统计数据。
产品经理,能够根据这个指标,去尝试分析整个网站/产品,各个页面的表现怎么样,是否是须要去优化产品的布局;吸引用户最终能够进入最后的支付页面。
数据分析师,能够基于此数据,作更深一步的计算和分析。
企业管理层,能够看到整个公司的网站,各个页面的之间的跳转的表现如何,作到内心有数,能够适当调整公司的经营战略或策略。
该模块主要是计算,涉及到页面切片算法以及页面流匹配算法。该模块可让产品经理、数据分析师以及企业管理层看到各个关键页面之间的转化率,从而对网页布局,进行更好的优化设计。主要使用 Spark Core 实现。算法
1.3.3 区域热门商品离线统计
该模块主要。
咱们认为,不一样地区的经济发展水平不一样,地理环境及气候不一样,人们的风土人情和风俗习惯不一样,所以对于不一样商品的需求不一样,根据区域热门商品的统计,可让公司决策层更好的对不一样类型商品进行布局,使商品进入最须要他的区域。
该模块可让企业管理层看到公司售卖的商品的总体状况,从而对公司的商品相关的战略进行调整。主要使用 Spark SQL 实现。sql
1.3.4 广告流量实时统计
网站/app 中常常会给第三方平台作广告,这也是一些互联网公司的核心收入来源;当广告位招商完成后,广告会在 网站/app 的某个广告位发布出去,当用户访问 网站/app 的时候,会看到相应位置的广告,此时,有些用户可能就会去点击那个广告。
咱们要获取用户点击广告的行为,并针对这一行为进行计算和统计。
用户每次点击一个广告之后,会产生相应的埋点日志;在大数据实时统计系统中,会经过某些方式将数据写入到分布式消息队列中(Kafka)。
日志发送给后台 web 服务器(nginx),nginx 将日志数据负载均衡到多个 Tomcat 服务器上,Tomcat 服务器会不断将日志数据写入 Tomcat 日志文件中,写入后,就会被日志采集客户端(好比 Flume Agent)所采集,随后写入到消息队列中(Kafka),咱们的实时计算程序会从消息队列中( Kafka)去实时地拉取数据,而后对数据进行实时的计算和统计。
Kafka这个模块的意义在于,让产品经理、高管能够实时地掌握到公司打的各类广告的投放效果。以便于后期持续地对公司的广告投放相关的战略和策略,进行调整和优化;以指望得到最好的广告收益。
该模块负责实时统计公司的广告流量,包括广告展示流量和广告点击流量。;;;。主要使用 Spark Streaming 实现。数据库
2.1 项目架构
用户行为数据在网站上最简单的存在形式就是日志。网站在运行过程当中会产生大量的原始日志 RAW LOG,将其存储在文件系统中,企业会将多种原始日志按照用户行为汇总成会话日志 SESSION LOG,每个会话日志表示用户的一种反馈。
本项目分为与两大模块。
在离线分析系统中,咱们将模拟业务数据写入 Hive 表中,离线分析系统从 Hive 中获取数据,并根据实际需求(用户访问 Session 分析、页面单跳转化率分析、各区域热门商品统计) 对数据进行处理,最终将分析完毕的统计数据存储到 MySQL 的对应表格中。
在实时分析系统中,咱们将模拟业务数据写入 Kafka 集群中, 实时分析系统从 Kafka broker 中获取数据,经过 Spark Streaming 的流式处理对广告点击流量进行实时分析,最终将统计结果存储到 MySQL 的对应表格中。express
2.2 离线日志采集宏观流程(参考)
2.3 实时日志采集宏观流程(参考)
2.4 离线/实时日志采集框架
上图是一个企业级的日志处理框架,这一框架实现了对日志信息进行采集、汇总、清洗、聚合、分析的完整过程,并将日志数据分别存储到了离线和实时数据处理模块中,使得分析系统能够经过离线和实时两个角度对数据进行分析统计,并根据统计结果指导业务平台的改良和优化。apache
3.1 离线数据
3.1.1 数据模型与数听说明
一、user_visit_action
user_visit_action 表,存放网站或者 APP 天天的点击流数据。通俗地讲,就是用户对 网站/APP 每点击一下,就会产生一条存放在这个表里面的数据。
user_visit_action 表中的字段解析以下所示:
二、user_info
user_info 表,是一张普通的用户基本信息表;这张表中存放了 网站/APP 全部注册用户的基本信息。
user_info 表中的字段解析以下所示:
三、product_info
product_info 表,是一张普通的商品基本信息表;这张表中存放了 网站/APP 全部商品的基本信息。
product_info 表中的字段解析以下所示:
3.2 实时数据
3.2.1 数据模型与数听说明
程序每 5 秒向 Kafka 集群写入数据,格式以下:
格式 :timestamp province city userid adid
在线数据的字段解析以下所示:
新建一个 maven 工程 commerce_basic 做为父 maven 工程,引入依赖 pom.xml
pom.xml
4.1 mock 模块(模拟数据产生模块)
新建一个模块 maven 工程 mock 做为子 maven 工程,引入依赖 pom.xml
pom.xml
MockDataGenerate.scala
MockRealTimeData.scala
4.2 commons 模块(公共模块)
新建一个模块 maven 工程 commons 做为子 maven 工程,引入依赖 pom.xml
pom.xml
工具类名称
ConfigurationManager.scala
Constants.scala
DataModel.scala
PooledMySqlClientFactory.scala
Utils.scala
commerce.properties
log4j.properties
4.3 analyse 模块(数据分析模块)
新建一个模块 maven 工程 analyse 做为子 maven 工程,删除掉 src 目录,引入依赖 pom.xml,添加对 scala 框架的支持。
:在该子模块中有不少子模块。即具体需求实现的模块。
pom.xml
analyse 模块是需求的具体实现模块, 咱们将会在第 5 章中进行详细解析。
5.1 需求一:Session 各范围访问步长、访问时长占比统计
5.1.1 需求解析
需求一:要统计出符合筛选条件的 session 中,访问时长在 1s~3s、4s~6s、7s~9s、10s~30s、30s~60s、1m~3m、3m~10m、10m~30m、30m 以上各个范围内的 session 占比;访问步长在 1~三、4~六、7~九、10~30、30~60、60 以上各个范围内的 session 占比,并将结果保存到 MySQL 数据库中。
在计算以前须要根据查询条件筛选 session,查询条件好比搜索过某些关键词的用户、访问时间在某个时间段内的用户、年龄在某个范围内的用户、职业在某个范围内的用户、所在某个城市的用户,发起的 session。找到对应的这些用户的 session,并进行统计,之因此须要有筛选主要是可让使用者,对感兴趣的和关系的用户群体,进行后续各类复杂业务逻辑的统计和分析,那么拿到的结果数据,就是只是针对特殊用户群体的分析结果;而不是对全部用户进行分析的泛泛的分析结果。好比说,如今某个企业高层,就是想看到用户群体中,28~35 岁的老师职业的群体,对应的一些统计和分析的结果数据,从而辅助高管进行公司战略上的决策制定。
session 访问时长,也就是说一个 session 对应的开始的 action 到结束的 action 之间的时间范围;还有,就是访问步长,指的是,一个 session 执行期间内,依次点击过多少个页面,好比说,一次 session 维持了 1 分钟,那么访问时长就是 1m,而后在这 1 分钟内,点击了 10 个页面,那么 session 的访问步长,就是 10。
好比说,符合第一步筛选出来的 session 的数量大概是有 1000 万个。那么里面,咱们要计算出,访问时长在 1s~3s 内的 session 的数量,并除以符合条件的总 session 数量(好比 1000 万),好比是 100 万/1000 万,那么 1s~3s 内的 session 占比就是 10%。依次类推,这里说的统计,就是这个意思。
这个功能可让人从全局的角度看到,符合某些条件的用户群体使用咱们的产品的一些习惯。好比大多数人,究竟是会在产品中停留多长时间,大多数人,会在一次使用产品的过程当中,访问多少个页面。那么对于使用者来讲, 有一个全局和清晰的认识。
5.1.2 数据源解析
5.1.3 数据结构解析
一、UserVisitAction 样例类
二、UserInfo 样例类
为何联立用户表?
用户表中记录了用户详细的我的信息,包括年龄、职业、城市、性别等,,那么咱们就能够经过联立用户表,,而后根据用户属性对统计信息进行过滤,将不属于咱们所关注的用户群体的用户所产生的行为数据过滤掉,这样就能够实现对指定人群的精准分析。
5.1.4 需求实现简要流程
5.1.5 需求实现详细流程
5.1.6 MySQL 存储结构解析
MySQL 写入数据格式
session_aggr_stat
5.1.7 代码解析
在模块 analyse 新建一个模块 session,引入 pom 文件,修改 src 目录名称为 scala,同时添加 scala 框架的支持。
代码实现示例以下:
SessionStat.scala
自定义累加器 SessionStatisticAccumulator 代码以下:
数据模型代码以下:
5.1.8 需求一实现思路整理
5.2 需求二:Session 随机抽取
5.2.1 需求解析
在符合条件的 session 中,按照时间比例随机抽取 1000 个 session。
这个按照时间比例是什么意思呢?随机抽取自己是很简单的,可是按照时间比例,就很复杂了。好比说,这一天总共有 1000 万的 session。那么我如今总共要从这 1000 万 session 中,随机抽取出来 1000 个 session。可是这个随机不是那么简单的。须要作到以下几点要求:首先,若是这一天的 12:00~13:00 的 session 数量是 100万,那么这个小时的 session 占比就是 1/10,那么这个小时中的 100 万的 session,咱们就要抽取 1/10 * 1000 = 100 个。即从这个小时的 100 万 session 中,随机抽取出 100 个 session。以此类推,其余小时的抽取也是这样作。
这个功能的做用是说,可让使用者,可以对于符合条件的 session,按照时间比例均匀的随机采样出 1000 个 session,而后观察每一个 session 具体的点击流/行为, 好比先进入了首页、而后点击了食品品类、而后点击了雨润火腿肠商品、而后搜索了火腿肠罐头的关键词、接着对王中王火腿肠下了订单、最后对订单作了支付。
之因此要作到按时间比例随机采用抽取,就是要作到,观察样本的公平性。
抽取完毕以后,须要将 Session 的相关信息和详细信息保存到 MySQL 数据库中。
5.2.2 数据源解析
本需求的数据源来自于需求一中获取的 Session 聚合数据(fullAggrInfo)。
5.2.3 数据结构解析
SessionRandomExtract 样例类
5.2.4 需求实现简要流程
5.2.5 需求实现详细流程
5.2.6 MySQL 存储结构解析
MySQL 写入数据格式
session_detail
session_random_extract
5.2.7 代码解析
5.2.8 需求二实现思路整理
5.3 需求三:Top10 热门品类统计
5.3.1 需求解析
在符合条件的 session 中,获取点击、下单和支付数量排名前 10 的品类。
数据中的每一个 session 可能都会对一些品类的商品进行点击、下单和支付等等行为,那么如今就须要获取这些 session 点击、下单和支付数量排名前 10 的最热门的品类。也就是说,要计算出全部这些 session 对各个品类的点击、下单和支付的次数, 而后按照这三个属性进行排序,获取前 10 个品类。
这个功能很重要,可让咱们明白,符合条件的用户,他最感兴趣的商品是什么种类。这个可让公司里的人,清晰地了解到不一样层次、不一样类型的用户的心理和喜爱。
计算完成以后,将数据保存到 MySQL 数据库中。
5.3.2 数据源解析
5.3.3 数据结构解析
5.3.4 需求实现简要流程
5.3.5 需求实现详细流程
5.3.6 MySQL 存储结构解析
5.3.7 代码解析
5.3.8 需求三实现思路整理
5.4 需求四:Top10 热门品类的 Top10 活跃 Session 统计
5.4.1 需求解析
对于排名前 10 的品类,分别获取其点击次数排名前 10 的 session。
这个就是说,对于 top10 的品类,每个都要获取对它点击次数排名前 10 的 session。
这个功能,可让咱们看到,对某个用户群体最感兴趣的品类,各个品类最感兴趣最典型的用户的 session 的行为。
计算完成以后,将数据保存到 MySQL 数据库中。
5.4.2 数据源解析
5.4.3 数据结构解析
5.4.4 需求实现简要流程
5.4.5 需求实现详细流程
5.4.6 MySQL 存储结构解析
5.4.7 代码解析
5.4.8 需求3、四实现思路整理
5.5 需求五:页面单跳转化率统计
5.5.1 需求解析
计算页面单跳转化率 什么是页面单跳转换率 好比一个用户在一次 Session 过程当中访问的页面路径 3,5,7,9,10,21,那么页面 3 跳到页面 5 叫一次单跳,7-9 也叫一次单跳,那么单跳转化率就是要统计页面点击的几率,好比: 计算 3-5 的单跳转化率,先获取符合条件的 Session 对于页面 3 的访问次数(PV)为 A,而后获取符合条件的 Session 中访问了页面 3 又紧接着访问了页面 5 的次数为 B,那么 B/A 就是 3-5 的页面单跳转化率,咱们记为 C;那么页面 5-7 的转化率怎么求呢?先须要求出符合条件的 Session 中访问页面 5 又紧接着访问了页面 7 的次数为 D,那么 D/B 即为 5-7 的单跳转化率。
产品经理,能够根据这个指标,去尝试分析整个网站、产品各个页面的表现怎么样,是否是须要去优化产品的布局;吸引用户最终能够进入最后的支付页面。
数据分析师,能够此数据作更深一步的计算和分析。
企业管理层, 能够看到整个公司的网站,各个页面的之间的跳转的表现如何,能够适当调整公司的经营战略或策略。
在如下模块中,须要根据查询对象中设置的 Session 过滤条件,先将对应的 Session 过滤出来,而后根据查询对象中设置的页面路径,计算页面单跳转化率,好比查询的页面路径为:三、五、七、8,那么就要计算 3-五、5-七、7-8 的页面单跳转化率。须要注意的一点是,页面的访问是有前后的。
5.5.2 数据源解析
5.5.3 数据结构解析
5.5.4 需求实现简要流程
如何作
5.5.5 需求实现详细流程
5.5.6 MySQL 存储结构解析
5.5.7 代码解析
在 analyse 中新建子模块 page,配置 pom.xml 文件,添加 scala 框架的支持
5.5.8 需求五实现思路整理
5.6 需求六:各区域 Top3 商品统计
5.6.1 需求解析
根据用户指定的日期查询条件范围,统计各个区域下的最热门【点击】的 top3 商品,区域信息、各个城市的信息在项目中用固定值进行配置,由于不怎么变更。
5.6.2 数据源解析
商品信息表 + 用户访问行为表
5.6.3 数据结构解析
城市信息(城市 ID,城市名称,区域名称)
5.6.4 需求实现简要流程
5.6.5 需求实现详细流程
5.6.6 MySQL 存储结构解析
5.6.7 代码解析
在 analyse 中新建子模块 product,配置 pom.xml 文件,添加 scala 框架的支持
自定义弱类型的 UDAF 函数
AreaTop3Product 类
5.6.8 需求六实现思路整理
5.7 需求七:广告点击黑名单实时统计
广告流量实时统计【概览】
5.7.1 需求解析
实现实时的动态黑名单机制:将天天对某个广告点击超过 100 次的用户拉黑。
5.7.2 数据源解析
5.7.3 数据结构解析
5.7.4 需求实现简要流程
5.7.5 需求实现详细流程
5.7.6 MySQL 存储结构解析
5.7.7 代码解析
在 analyse 中新建子模块 advertising,配置 pom.xml 文件,添加 scala 框架的支持
准备工做:数据生成与数据消费测试
一、先启动 zookeeper 集群,再启动 kafka 集群
二、启动一个 kafka 消费者进程
三、启动数据生成程序 MockRealTimeData
四、启动数据消费程序 AdClickRealTimeStat
五、查看控制台消费者的输出 以及 Linux 上的 kafka 消费者的输出,没有问题!下面实现具体的需求。
AdBlacklist 类
5.7.8 需求七实现思路整理
5.8 需求八:各省各城市广告点击量实时统计
5.8.1 需求解析
5.8.2 数据源解析
5.8.3 数据结构解析
5.8.4 需求实现简要流程
5.8.5 需求实现详细流程
5.8.6 MySQL 存储结构解析
5.8.7 代码解析
AdStat 类
5.8.8 需求八实现思路整理
5.9 需求九:天天每一个省份 Top3 热门广告
5.9.1 需求解析
5.9.2 数据源解析
数据来源于需求八 updateStateByKey 获得的 DStream。
5.9.3 数据结构解析
Dstream[(dateKey_province_city_adid, count)]
5.9.4 需求实现简要流程
5.9.5 需求实现详细流程
5.9.6 MySQL 存储结构解析
5.9.7 代码解析
AdProvinceTop3 类
5.9.8 需求九实现思路整理
5.10 需求十:最近一小时广告点击量实时统计
5.10.1 需求解析
统计各广告最近 1 小时内的点击量趋势:各广告最近 1 小时内各分钟的点击量。
5.10.2 数据源解析
5.10.3 数据结构解析
5.10.4 需求实现简要流程
5.10.5 需求实现详细流程
5.10.6 MySQL 存储结构解析
5.10.7 代码解析
AdClickTrend 类
5.10.8 需求7、8、9、十实现思路整理
本文地址:http://lianchengexpo.xrbh.cn/quote/12389.html 迅博思语资讯 http://lianchengexpo.xrbh.cn/ , 查看更多