0x00 教程内容
- 项目分析
- 编程实现
基础知识及环境准备:
1、Maven的构建,学会Scala编程
2、IDEA已经安装好了Scala插件
0x01 项目分析
1. 项目背景
我们在浏览网站的时候,我们的很多信息都会被网站的后台采集到,采集的方式有很多种,至于怎么采集,以后有机会再写教程详细说,这篇教程主要是讲解采集到了数据后,对数据进行一个切割的过程。关于信息的收集,可参考文章,自行了解一下:网站分析数据(即用户行为数据)的三种收集方式详解 如果有时间,再整理相应的实操教程出来。
会话切割:用户行为分析的前置工作,相当于一个前置处理过程而已。
2. 学习收获
学完此教程,可以学到平时工作上怎么实现会话切割的一整套流程?理解切割前后的数据是怎样的?更加熟悉Scala API的使用以及其他开发上的技巧等等。
3. 数据源介绍
目前我们已经采集到了三份数据:网站用户点击日志、用户Cookie的标签、网站域名的标签
一、网站用户点击日志(存储在HDFS),格式如下:
#type|server time|cookie|ip|url pageview|2017-09-04 12:00:00|cookie1|127.0.0.3|https://www.baidu.com click|2017-09-04 12:00:02|cookie1|127.0.0.3|https://www.baidu.com pageview|2017-09-04 12:00:01|cookie2|127.0.0.4|https://www.baidu.com click|2017-09-04 12:00:04|cookie1|127.0.0.3|https://www.baidu.com pageview|2017-09-04 12:00:02|cookie2|127.0.0.4|http://news.baidu.com click|2017-09-04 12:00:03|cookie2|127.0.0.4|http://news.baidu.com pageview|2017-09-04 12:00:04|cookie2|127.0.0.4|http://music.baidu.com/?fr=tieba pageview|2017-09-04 12:45:01|cookie1|127.0.0.3|https://tieba.baidu.com/index.html click|2017-09-04 12:45:02|cookie1|127.0.0.3|https://tieba.baidu.com/index.html click|2017-09-04 12:45:03|cookie1|127.0.0.3|https://tieba.baidu.com/index.html hhhh|2017-09-04 12:45:03|cookie1|127.0.0.3|https://tieba.baidu.com/index.html 3333ss|2017-09-04 12:45:03|cookie1|127.0.0.3|https://tieba.baidu.com/index.html
解释
此可以通过网站的后台采集到,我们去访问了一次网页时,这是一个行为,我们叫这个行为称为pageview行为;我们点击(click)了网页的某个按钮,也会有一个点击行为;还有在网页中滚动、选定文字等等也是相应的行为……每个行为都会产生相应的信息,至于是什么信息,可以看一下上面的数据里面有什么内容,这些信息都可以被采集到后台。这里为了方便起见,只拿pageview与click这两个行为作为例子,这些行为与Session机制是分不开的。这里的数据的第一行是对应的列含义,除了第一行,其他行的列是以“|”分开。因为这些行为信息会很多,所以我们将其存储到HDFS上。
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
——来自百度百科
通俗易懂描述:
至于会话,学过浏览器相关知识的人应该都比较清楚什么是会话,会话即session,我们在浏览网站的时候,会对网站发起一次会话,就好像我们用XShell建立一个会话窗口访问我们的服务器一样,那也是一个会话,而且你会发现,如果窗口很久不动它,它会自动断开连接。在我们浏览网站的时候也一样,我们的会话有效时长默认是30min,30min不动,默认断开会话。
这里我们所做的会话切割业务,就是根据我们网站后台记录的时间,每隔30分钟切割成一个会话。
我们现在已经有一个比较粗略概念,即会话有点类似与一种请求,而这个请求,Web服务器可以自动给你创建一个Session对象,里面可以存各种属性,包括pageview、click等等。
二、用户Cookie的标签(存储在HDFS),格式如下:
cookie1|固执 cookie2|有偏见 cookie3|执着 cookie4|执行力很强
解释
每个cookie都打上了对应的类型,作为标签。此过程可以由数据团队,根据机器学习的算法来实现,这里不纠结先,后期有时间会给出教程。因为这些行为信息也会很多,所以我们也将其存储到HDFS上。
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。
——来自百度百科
三、网站域名的标签(存储在配置库,如数据库)
"www.baidu.com" -> "level1", "www.taobao.com" -> "level2", "jd.com" -> "level3", "youku.com" -> "level4"
解释
我们自定义的给网站分的级别,已经打上了相应的级别标签,当然,也可能有些域名没有分级。这些域名远远没有行为信息那么多,我们可以考虑存储在传统数据库里面。
4. 项目总体流程
其实上面就是一个ETL的过程,最终我们会得到两张表,分别是TrackerLog表与TrackerSession表,也都是存储在HDFS上的,我们这里用的存储方式是Parquet格式。TrackerLog对应我们的原始日志的表,TrackerSession为我们切割后的Session信息表。
我们可以大致用肉眼看一下上面的十行数据,每30min切成成一个会话,我们可以看出来,是有三个会话的,如果我们最后切割出来有三个会话,则表示我们实操结果是对的。
但在此过程中,我们主要是实现的是上图中间的会话切割、生成会话这里边的业务。
5. 最终数据结构
a. 确定表字段
TrackerLog表的字段(暂时可以先忽略里面的数据):
TrackerSession表字段(暂时可以先忽略里面的数据):