# 行为分析系统
## 用户访问session分析模块
* 用户访问session介绍:
* 模块的目标:对用户访问session进行分析
1、可以根据使用者指定的某些条件,筛选出指定的一些用户(有特定年龄、职业、城市);
2、对这些用户在指定日期范围内发起的session,进行聚合统计,比如,统计出访问时长在0-3s的session占总session数量的比例;
3、按时间比例,比如一天有24个小时,其中12:00-13:00的session数量占当天总session数量的50%,当天总session数量是10000个,那么当天总共要抽取1000个session,ok,12:00-13:00的用户,就得抽取1000*50%=500。而且这500个需要随机抽取。
### 基础表结构
* 表名:task(MySQL表)
```
task_id:表的主键
task_name:任务名称
create_time:创建时间
start_time:开始运行的时间
finish_time:结束运行的时间
task_type:任务类型
task_status:任务状态
task_param:用JSON的格式,来封装用户提交的任务对应的特殊的筛选参数
```
* 表名:user_visit_action(Hive表)
```
date
user_id
session_id
page_id
action_time
search_keyword
click_category_id
click_product_id
order_category_ids
order_product_ids
pay_category_ids
pay_product_ids
```
user_visit_action表,网站每天的点击流的数据。
表名:user_info(Hive表)
```
user_id
username
name
age
professional
city
```
user_info表 放置了网站注册用户的信息。
> spark从MySQL表中读取任务参数,执行作业逻辑,持久化作业结果数据。
* 1、按条件筛选session
* 2、聚合统计
* 3、在符合条件的session中,获取点击、下单和支付数量排名前10的品类
* 4、对于排名前10的品类,分别获取其点击次数排名前10的session这个需求,需要使用Spark的分组取TopN的算法来进行实现。也就是说对排名前10的品类对应的数据,按照品类id进行分组,然后求出每组点击数量排名前10的session。
### session聚合统计
#### 自定义聚合函数 SessionAggrStatAccumulator.java
### session随机抽取
**session随机抽取:**按每天的每个小时的session数量,占当天session总数的比例,乘以每天要抽取的session数量,计算出每个小时要抽取的session数量;
### top10热门品类
计算出来通过筛选条件的那些session,他们访问过的所有品类(点击、下单、支付),按照各个品类的点击、下单和支付次数,降序排序,获取前10个品类,也就是筛选条件下的那一批session的top10热门品类;
点击、下单和支付次数:**优先按照点击次数排序、如果点击次数相等,那么按照下单次数排序、如果下单次数相当,那么按照支付次数排序**
---
## 性能调优相关知识
### 在实际项目中分配更多资源
* 分配更多资源:
性能调优的王道,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的;
基本上,在一定范围之内,增加资源与性能的提升,是成正比的;
写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,我觉得,就是要来调节最优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。
问题:
```
1、分配哪些资源?
2、在哪里分配这些资源?
3、为什么多分配了这些资源以后,性能会得到提升?
```
答案:
1、分配哪些资源?executor、cpu per executor、memory per executor、driver memory
2、在哪里分配这些资源?在我们在生产环境中,提交spark作业时,用的spark-submit shell脚本,里面调整对应的参数
```bash
/usr/local/spark/bin/spark-submit \
--class cn.spark.sparktest.core.WordCountCluster \
--num-executors 3 \ 配置executor的数量
--driver-memory 100m \ 配置driver的内存(影响不大)
--executor-memory 100m \ 配置每个executor的内存大小
--executor-cores 3 \ 配置每个executor的cpu core数量
/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
```
3、调节到多大,算是最大呢?
第一种,Spark Standalone,公司集群上,搭建了一套Spark集群,你心里应该清楚每台机器还能够给你使用的,大概有多少内存,多少cpu core;那么,设置的时候,就根据这个实际的情况,去调节每个spark作业的资源分配。比如说你的每台机器能够给你使用4G内存,2个cpu core;20台机器;executor,20;4G内存,2个cpu core,平均每个executor。
第二种,Yarn。资源队列。资源调度。应该去查看,你的spark作业,要提交到的资源队列,大概有多少资源?500G内存,100个cpu core;executor,50;10G内存,2个cpu core,平均每个executor。
一个原则,你能使用的资源有多大,就尽量去调节到最大的大小(executor的数量,几十个到上百个不等;executor内存;executor cpu core)4、为什么调节了资源以后,性能可以提升?
**增加executor**:
如果executor数量比较少,那么,能够并行执行的task数量就比较少,就意味着,我们的Application的并行执行的能力就很弱。
比如有3个executor,每个executor有2个cpu core,那么同时能够并行执行的task,就是6个。6个执行完以后,再换下一批6个task。增加了executor数量以后,那么,就意味着,能够并行执行的task数量,也就变多了。比如原先是6个,现在可能可以并行执行10个,甚至20个,100个。那么并行能力就比之前提升了数倍,数十倍。
相应的,性能(执行的速度),也能提升数倍-数十倍。
**增加每个executor的cpu core**,也是增加了执行的并行能力。原本20个executor,每个才2个cpu core。能够并行执行的task数量,就是40个task。
现在每个executor的cpu core,增加到了5个。能够并行执行的task数量,就是100个task。
执行的速度,提升了2.5倍。
**增加每个executor的内存量。**
增加了内存量以后,对性能的提升,有两点:
1、**如果需要对RDD进行cache**,那么更多的内存,就可以缓存更多的数据,将更少的数据写入磁盘,甚至不写入磁盘。减少了磁盘IO。
2、对于shuffle操作,reduce端,会需要内存来存放拉取的数据并进行聚合。**如果内存不够,也会写入磁盘**。如果给executor分配更多内存以后,就有更少的数据,需要写入磁盘,甚至不需要写入磁盘。减少了磁盘IO,提升了性能。
3、对于task的执行,可能会创建很多对象。如果内存比较小,可能会频繁导致JVM堆内存满了,然后频繁GC,垃圾回收,minor GC和full GC。(速度很慢)。**内存加大以后,带来更少的GC,垃圾回收,避免了速度变慢,速度变快了。**
### 在实际项目中调节并行度
**并行度**:其实就是指的是,Spark作业中,各个stage的task数量,也就代表了Spark作业的在各个阶段(stage)的并行度。
**如果不调节并行度,导致并行度过低,会怎么样?**
假设,现在已经在spark-submit脚本里面,给我们的spark作业分配了足够多的资源,比如50个executor,每个executor有10G内存,每个executor有3个cpu core。基本已经达到了集群或者yarn队列的资源上限。
task没有设置,或者设置的很少,比如就设置了,100个task。50个executor,每个executor有3个cpu core,也就是说,你的Application任何一个stage运行的时候,都有总数在150个cpu core,可以并行运行。但是你现在,只有100个task,平均分配一下,每个executor分配到2个task,ok,
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringBoot+Spark的行为日志分析系统源码+详细文档+全部数据资料 高分项目.zip
共271个文件
dat:163个
java:75个
xml:10个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 22 浏览量
2024-05-08
17:15:20
上传
评论
收藏 611KB ZIP 举报
温馨提示
【资源说明】 基于SpringBoot+Spark的行为日志分析系统源码+详细文档+全部数据资料 高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot+Spark的行为日志分析系统源码+详细文档+全部数据资料 高分项目.zip (271个子文件)
logmirror.ctrl 48B
log.ctrl 48B
log1.dat 1024KB
c230.dat 344KB
c20.dat 100KB
c90.dat 72KB
c180.dat 68KB
ca1.dat 68KB
c8c1.dat 64KB
c6d0.dat 64KB
c570.dat 64KB
c5d0.dat 64KB
c490.dat 64KB
c8a0.dat 64KB
c670.dat 64KB
c510.dat 64KB
c530.dat 64KB
c9c0.dat 64KB
c6f0.dat 64KB
c630.dat 64KB
c5f0.dat 64KB
c9b1.dat 64KB
c4b0.dat 64KB
c9e0.dat 64KB
c41.dat 36KB
c31.dat 24KB
c51.dat 24KB
c150.dat 20KB
c161.dat 20KB
c251.dat 20KB
c191.dat 16KB
c171.dat 16KB
c1a1.dat 16KB
cf0.dat 16KB
c1b1.dat 16KB
cb1.dat 16KB
c111.dat 16KB
c60.dat 12KB
c300.dat 8KB
c7e1.dat 8KB
c521.dat 8KB
c3d1.dat 8KB
c2a1.dat 8KB
c840.dat 8KB
c331.dat 8KB
c211.dat 8KB
ca11.dat 8KB
c101.dat 8KB
c200.dat 8KB
c711.dat 8KB
c5e1.dat 8KB
c871.dat 8KB
c340.dat 8KB
c380.dat 8KB
c321.dat 8KB
c6e1.dat 8KB
c590.dat 8KB
c781.dat 8KB
c741.dat 8KB
c361.dat 8KB
c411.dat 8KB
c931.dat 8KB
c391.dat 8KB
ca21.dat 8KB
c430.dat 8KB
c470.dat 8KB
c3f1.dat 8KB
c4e1.dat 8KB
c3b1.dat 8KB
c690.dat 8KB
c561.dat 8KB
c650.dat 8KB
c121.dat 8KB
c681.dat 8KB
c1d1.dat 8KB
c1e0.dat 8KB
c4a1.dat 8KB
c981.dat 8KB
c6b0.dat 8KB
c71.dat 8KB
c9a1.dat 8KB
c9d1.dat 8KB
c601.dat 8KB
c4c1.dat 8KB
c1f1.dat 8KB
c2e1.dat 8KB
c581.dat 8KB
c371.dat 8KB
c290.dat 8KB
c441.dat 8KB
cd1.dat 8KB
c2d0.dat 8KB
c960.dat 8KB
c8b1.dat 8KB
c731.dat 8KB
c481.dat 8KB
c5a1.dat 8KB
c791.dat 8KB
c920.dat 8KB
c141.dat 8KB
共 271 条
- 1
- 2
- 3
资源评论
不走小道
- 粉丝: 3228
- 资源: 5113
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功