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

简介: 快速学习网站流量日志分析--数据预处理--点击流模型 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的模型,它都不是客观存在的模型,完全是一套业务理论模型,是由一些业务指标堆积而成的,它的存在就是为了计算某些指标的方便。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
1662 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
|
存储 Java 关系型数据库
基于JSP的九宫格日志网站
基于JSP的九宫格日志网站
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
4625 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
520 9
|
11月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1063 54
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
1529 3
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
1092 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log