# 电商用户行为分析大数据平台
## 项目介绍
1.基于Spark开发的平台
2.需要有spark基础
3.有很多高级知识和设计模式
4.电商用户行为分析大数据平台(项目名称)
5.访问行为,购物行为,广告点击行为,对这些行为进行分析,使用大数据技术来帮助公司提升业绩。
6.主要的功能模块有用户session分析,页面单跳转化率统计,热门商品离线统计,广告流量实时统计等4个业务模块。
7.所使用的知识点是spark core,spark SQL,spark streaming等三个技术框架。
8.主要是数据倾斜,线上故障,性能调优,troubleshooting等经验。
9.使用模拟数据,希望达到的效果。
10.需求分析,方案设计,数据设计,编码实现,测试以及性能调优等环节。
## 模块简介
1、用户访问session分析:该模块主要是对用户访问session进行统计分析,包括session的聚合指标计算、按时间比例随机抽取session、获取每天点击、下单和购买排名前10的品类、并获取top10品类的点击量排名前10的session。该模块可以让产品经理、数据分析师以及企业管理层形象地看到各种条件下的具体用户行为以及统计指标,从而对公司的产品设计以及业务发展战略做出调整。主要使用Spark Core实现。
2、页面单跳转化率统计:该模块主要是计算关键页面之间的单步跳转转化率,涉及到页面切片算法以及页面流匹配算法。该模块可以让产品经理、数据分析师以及企业管理层看到各个关键页面之间的转化率,从而对网页布局,进行更好的优化设计。主要使用Spark Core实现。
3、热门商品离线统计:该模块主要实现每天统计出各个区域的top3热门商品。然后使用Oozie进行离线统计任务的定时调度;使用Zeppeline进行数据可视化的报表展示。该模块可以让企业管理层看到公司售卖的商品的整体情况,从而对公司的商品相关的战略进行调整。主要使用Spark SQL实现。
4、广告流量实时统计:该模块负责实时统计公司的广告流量,包括广告展现流量和广告点击流量。实现动态黑名单机制,以及黑名单过滤;实现滑动窗口内的各城市的广告展现流量和广告点击流量的统计;实现每个区域每个广告的点击流量实时统计;实现每个区域top3点击量的广告的统计。主要使用Spark Streaming实现。
## 用户访问Session分析模块
用户session功能介绍
1.对用户访问session进行分析,可以根据使用者指定的某些条件筛选出指定的一些用户,对用户在指定日期范围内发起session,进行聚合统计,比如统计出访问时长在某段时间的session占总session数量的比例,按时间比例。
2.JDBC辅助类封装
3.获取点击量,下单量和支付量都排名10的商品种类
4.获取top10的商品种类的点击数量排名前10的session
5.开发完毕了以上功能以后,需要进行大量,复杂,高端,全套的性能调优。
6.10亿数据量的troubleshooting的经验总结
7.数据倾斜的完美解决方案,数据倾斜往往是大数据处理程序的性能杀手。
8.把使用moc的数据,对模块进行处理,调试。
## 实际架构
1.javaee平台接受到执行统计分析任务的请求之后,会调用封装了spark-submit的shell脚本执行。
2.spark作业获取指定参数,然后运行复杂的作业逻辑,进行该模块的统计和分析。
3.spark作业统计和分析的结果,会写入mySQL中,指定的表。
4.最后通过Javaee进行结果展示。
## 用户访问session介绍
1.用户在电商网站上,通常会有很多点击行为,首页通常都是进入首页,然后可能点击首页上的一些商品,点击首页上的一些品类,也可能随时在搜索框里面搜索关键词,还可能将一些商品加入购物车,对购物车中的多个商品下订单,最后对订单中的多个商品进行支付。
2.用户的每一次操作,可以理解为一个action,比如支付。
3.用户session,指的是用户第一次进入首页,session就开始了。然后在一定时间范围内,直到最后结束,离开网站,关闭浏览器,或者长时间没有操作,那么session就结束了,
4.以上用户在网站内的访问过程,就称为一次session。简单的说,session就是某一天时间内,某个用户对网站从打开或者进入,到做了大量操作,关闭浏览器的过程。就叫做session。
## 数据结构的介绍
### user_visit_action表
其实就是放,比如说网站,或者是app,每天的点击流的数据。可以理解为,用户对网站/app每点击一下,就会代表在这个表里面的一条数据。
表名:user_visit_action(Hive表)
date:日期,代表这个用户点击行为是在哪一天发生的
user_id:代表这个点击行为是哪一个用户执行的
session_id :唯一标识了某个用户的一个访问session
page_id:点击了某些商品/品类,也可能是搜索了某个关键词,然后进入了某个页面,页面的id
action_time:这个点击行为发生的时间点
search_keyword:如果用户执行的是一个搜索行为,比如说在网站/app中,搜索了某个关键词,然后会跳转到商品列表页面;搜索的关键词
click_category_id:可能是在网站首页,点击了某个品类(美食、电子设备、电脑)
click_product_id:可能是在网站首页,或者是在商品列表页,点击了某个商品(比如呷哺呷哺火锅XX路店3人套餐、iphone 6s)
order_category_ids:代表了可能将某些商品加入了购物车,然后一次性对购物车中的商品下了一个订单,这就代表了某次下单的行为中,有哪些商品品类,可能有6个商品,但是就对应了2个品类,比如有3根火腿肠(食品品类),3个电池(日用品品类)
order_product_ids:某次下单,具体对哪些商品下的订单
pay_category_ids:代表的是,对某个订单,或者某几个订单,进行了一次支付的行为,对应了哪些品类
pay_product_id:代表的,支付行为下,对应的哪些具体的商品
### user_info表
实际上,就是一张最普通的用户基础信息表;这张表里面,其实就是放置了网站/app所有的注册用户的信息。那么我们这里也是对用户信息表,进行了一定程度的简化。比如略去了手机号等这种数据。因为我们这个项目里不需要使用到某些数据。那么我们就保留一些最重要的数据,即可。
表名:user_info(Hive表)
user_id:其实就是每一个用户的唯一标识,通常是自增长的Long类型,BigInt类型
username:是每个用户的登录名
name:每个用户自己的昵称、或者是真实姓名
age:用户的年龄
professional:用户的职业
city:用户所在的城市
### task表
其实是用来保存平台的使用者,通过J2EE系统,提交的基于特定筛选参数的分析任务,的信息,就会通过J2EE系统保存到task表中来。之所以使用MySQL表,是因为J2EE系统是要实现快速的实时插入和查询的。
表名:task(MySQL表)
task_id:表的主键
task_name:任务名称
create_time:创建时间
start_time:开始运行的时间
finish_time:结束运行的时间
task_type:任务类型,就是说,在一套大数据平台中,肯定会有各种不同类型的统计分析任务,比如说用户访问session分析任务,页面单跳转化率统计任务;所以这个字段就标识了每个任务的类型
task_status:任务状态,任务对应的就是一次Spark作业的运行,这里就标识了,Spark作业是新建�