网站流量日志分析--数据预处理 --点击流模型 visit 代码实现| 学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习网站流量日志分析--数据预处理--点击流模型 visit 代码实现

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第二阶段)网站流量日志分析--数据预处理--点击流模型 visit 代码实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/694/detail/12196


网站流量日志分析--数据预处理--点击流模型 visit 代码实现

内容介绍:

一、代码实现

二、运行效果

三、总结梳理

 

一、代码实现

明确了编程实现思路之后,接下来确定代码层面如何具体实现,打开编译器的 visit模型。

 image.png

1.整体流程

首先写一个类叫做 ClickStreamvisit,这里面就是处理数据的矮码核心逻辑,第一步确定map阶段,根据画谱知道在map阶段,没有进行任何核心的操作,也就是读取一行记录把里面的 session 提出来之后,key把这一行记录分装成 pageview 作为 V传递出去即可。代码非常简单,读取一行后将其转为字符串,然后按照\001进行切割,所以数据当中也是\001不可见分隔符,切完之后,需要进行解释,把里面具体的每一个字段保存在 pvBean 中,key叫做 pvBean getSession,也就是把会话当中的key,v就是 pageviewsBean,整体逻辑和画图板没有任何区别。

map阶段没有去做任何具体的操作,经过map之后来到reduce阶段,reduce所接触到的大量的keyV,它们的key都是 sessionV就是 pageviewsBean。

2.具体逻辑的实现

首先还是在同一组当中,把这一组所有的对象 pageviewsBean 创建在集合当中,先定义一个Array集合,里面保存的是 pageviewsBean,它的数据来自于这一组迭代器当中,所有对象把它迭代出来,通过对象的复制将它添加到集合当中,添加完成之后,针对这个集合进行排序,通过画谱知道排序现在有两种选择,既可以按照时间正序排序,也可以按照步骤号排序,因为步骤号的顺序就是访问时间的证据,这里直接以步骤号来进行排序。把集合放在 collection.sort 当中的时候,用了comparable 重写它的方法,然后get两个步骤当中的步骤号。规则是o1step是否大于o2d step,因为步骤号是一个基本数据类型,所以可以直接来判断,如果大于,做一个三元运算返回1,否则的话返回-1comparable 方法是根据正数负数零来判断的,如果大于返回的是正数,小于返回负数,相等为0,这样就完成了根据步骤号进行排序,当然也可以继续按照获取时间进行排序,方法是大同小异的。

排序完成之后就比较简单了,去创建一个 visitBean,就是最终需要输送类型,在这个问题当中,确定了以下需要输出的数据类型,包括会话 session、属于哪个用户的IP、然后进入时间 intime、离开时间 outtime、进入页面 inpage、离开页面outpage,来自哪里 referal 以及最后一个 pageVisits,在一个会话话当中总共的访问界面,也就是画谱中所说的 total pages,单词的属性名字不一样,但描述的意思是一样的,即一个会话总共访问了几个页面。

确定了这些数据之后,注意不要忘了它的rival序列化机制,在刚才的几个当中get0,提前第一个页面作为进入页面,第一条时间作为进入时间,最后一条时间、最后一个的页面作为离开的时间和离开的页面,总共访问了几个页面,就是集合的size

同一个会话的记录一定来到同一组中,同一组一定保存在同一个集合当中,size 为一,一个会话就有一条,size2就是两条记录,这样把数据直接写出即可,最后发现计算非常方便.下面是main方法,全都是模板代码,主要是指定mapreduce以及输入输出路径,这时要注意根据画谱知道V的模型数据来自于pageviews模型数据,所以此时的输入路径应该是上一个代码程序的输出路径。

 

二、运行效果

打开本地模式,上一个输出路径为 pageviews,把这个路径作为输入复制到这里,设置为它的 input pass,输入进后可以单独写一个,右键运行来执行,这时候是用本地模式来运行的,计算的速度将会非常的快,因为数据量比较小,当然数据量大的时候,一定要把程序打架包放在样机上,采用分布式来进行计算。

处理完之后打开本地的输出路径来看一下V的目录结果,当中 success 标识计算是成功的,右键打开一下这个数据,这时会发现当中就没有重复的session了,因为根据 session 进行聚合,不管同一个会话有几条记录都聚集为一条记录,当中属于会话的功能it进入时间、离开时间、进入页面、离开页面,可以看到有的在一其中访问了三步,有的访问了一步,有的可能访问两步,这样对于后面计算一些指标将会显得非常的方便,这就是点击流visit的模型。

 image.png

 

三、总结梳理

回到画谱中梳理 visit 的模型,visit 模型专注于每次会话内起始结束的访问情况,为此就要需要找到同一个会话的所有记录,只拿第一条和只拿最后一条,第一条的相关信息,就是它的起始信息,最后一条的信息,就是它的结束信息,这两个模型就构成了所谓的点击的模型,再次强调一点,不管是 pageviews 模型,还是visit的模型,它都不是客观存在的模型,完全是一套业务理论模型,是由一些业务指标堆积而成的,它的存在就是为了计算某些指标的方便。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
|
27天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
56 0
|
2月前
|
消息中间件 Kubernetes Kafka
微服务从代码到k8s部署应有尽有系列(十一、日志收集)
微服务从代码到k8s部署应有尽有系列(十一、日志收集)
|
2月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
3月前
|
Unix Python
Python代码示例:使用`syslog`模块进行日志记录
Python代码示例:使用`syslog`模块进行日志记录
|
2月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
18天前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
29天前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
61 9
|
2月前
|
开发框架 .NET Docker
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
下一篇
无影云桌面