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

简介: 快速学习网站流量日志分析--数据预处理--点击流模型 visit 编程实现思路

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

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


网站流量日志分析--数据预处理--点击流模型 visit 编程实现思路

内容介绍:

一、概述

二、思路及说明

三、逻辑梳理

四、总结


一、概述

下面来看点击流模型visit模型的具体实现,结合刚才所画的思路图来看一下如何通过代码具体实现,为了更地理解首先画图进行梳理,确定实现思路。

 

二、思路及说明

1.思路图

打开画图板,要想生成visit模型,它的处理数据就是刚才所生成的pageviews模型。它的待处理目录叫做点击流的pageviews模型数据,图示如下:

image.png

2.说明

首先是 pageviews 模型,有了模型数据后,还是经过矮码的两个阶段,首先是maptask 阶段,然后是 reducetask 阶段,maptask 阶段还是要确定输入的key和V分别是什么,输入到map阶段之后,默认的key和V不需要考虑,每行的起始偏移量这一行内容,重点在于 maptask 的输出,maptask 的输出是 reducetask 的输入,reducetask 又涉及到很多的聚合分组操作,要想确定以什么作为key,需要明确根据什么进行聚合。

打开之前所画的图,在得到visit的模式的时候需要找到属于同一个会话的所有记录,然后再去找它的第一条和最后一条,所以要根据数据会话 session 聚合,不是属于同一个会话的,不能聚集到一起。现在明确的是:输出的时候把 session ID作为key,V处理数据就是刚才 pageviews 的模型数据,一行的记录都可以传递给它,需要什么就去截取什么。

输出的 key 是 session,V是 pageviewsBean,有了这样的 key 和V之后,来到reduce会涉及到大量的项目,比如来到 reduce 里会有<session1,pageviewsBean>、<session2,pageviewsBean>等等,按照之前的逻辑矮马编程还要进行根据key的字节信息排序,排完之后相同的可以达到同一分组,组成一个新的kv对。进行排序分组的时候是把session作为key的,相同的会话会被分到同一组中,在同一组中会组成一个新的kv对,这个新的kv对中的k是这一组共同的k,比如是 session1,而它的v变成l Iteable的迭代器,里面是pageviewsBean,这里面的可以多写几个 pageviewsBean,pageviewsBean 有几个取决于数据,即同一个会话有几部,步骤多pageviewsBean自然就多,步骤少,可能只有一个。

 

三、逻辑梳理

回到画图板中,同一化之后进行排序,所关注的是起始和结束情况,即只需要关注第一步和最后一步。现在又涉及到一个问题,同一个会话的所有记录在一个迭代机当中,按照逻辑把属于同一个会话的所有记录按照时间进行排序,按照时间进行排序时有一个小技巧,即按照时间排序的同时也可以按照步骤号进行排序,一个pageviews 当中所打的步骤号就是时间的顺序号,比如时间为8:30:25、8:30:35、8:31:05的顺序分别是1、2、3,所以有两个排序规则,既可以按照时间排序,也可以按照步骤号排序。排序完成之后只拿第一条和最后一条,也就是第一步和最后一步。

排序方法和之前所讲一样,把属于同一个 session 的记录保存在一个集合当中,比如一个简单的伪代码,创建一个集合叫做List L1到另一个 ArrayList 中,其中保持的对象就是 page viewsBean,把所有对象放在当中,调用 collection.sort 方法进行排序,把集合放在当中,然后重写排序规则。排序完成之后,第二步就变得更加简单了,在同一个会话所属的集合中,只提取第一条记录和最后一条记录,因为visit模型所关注的就是起始和结束情况,而第一条记录就是起始记录,最后一条记录就是离开的记录,这就构成了所谓的visit模型,它的整个流程实现起来非常简单。

但需要注意的是,此时还没有完全实现完毕,还涉及到visit模型的数据输出,这里面会涉及到多个属性,例如 inpage 进入页面、intime 进入时间,还要 outtime、outpage,以及总共访问的页面 totalpage 等,这个时候还是利用Java的传递数据追踪,创建一个对象叫做visitBean,visitBean里面涵盖了所需要保存的数据,放在当中作为对象传递出去,输出的 key 和V也就可以确定了,输出的key叫做visitBean,当然要去重写它的投资方法等,V如果不知道还是用null空来表示,这样就完成了点击流当中visit模型的梳理。

 

四、总结

可以发现当中还是把业务结合 reduce 矮码的编程模型来实现,整个处理的核心逻辑还是在 reducetask 阶段完成,其中涉及到了Java当中如何排序,如何进行遍历等的相关操作。

以上就是 visit 模型怎么用代码来实现,思路非常重要,决定了后续的代码能不能写出来。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
人工智能 运维 监控
一招高效解析 Access Log,轻松应对泼天流量
一招高效解析 Access Log,轻松应对泼天流量
388 0
一招高效解析 Access Log,轻松应对泼天流量
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
2003 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
412 2
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
5289 32
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
739 9
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1596 55