网站流量模型(2)技术

网站流量日志数据分析是一个纯粹的数据分析项目,其整体流程基本上就是依据数据的处理流程进行。有以下几个大的步骤:

数据采集
数据采集概念,目前行业会有两种解释:一是数据从无到有的过程(web服务器打印的日志、自定义采集的日志等)叫做数据采集;另一方面也有把通过使用Flume等工具把数据采集到指定位置的这个过程叫做数据采集。
关于具体含义要结合语境具体分析,明白语境中具体含义即可。

数据预处理
通过mapreduce程序对采集到的原始日志数据进行预处理,比如清洗,格式整理,滤除脏数据等,并且梳理成点击流模型数据。

数据入库
将预处理之后的数据导入到HIVE仓库中相应的库和表中。

数据分析
项目的核心内容,即根据需求开发ETL分析语句,得出各种统计结果。

数据展现
将分析所得数据进行数据可视化,一般通过图表进行展示

在这里插入图片描述

系统的架构
相对于传统的BI数据处理,流程几乎差不多,但是因为是处理大数据,所以流程中各环节所使用的技术则跟传统BI完全不同: 

数据采集:定制开发采集程序,或使用开源框架Flume

数据预处理:定制开发mapreduce程序运行于hadoop集群

数据仓库技术:基于hadoop之上的Hive

数据导出:基于hadoop的sqoop数据导入导出工具

数据可视化:定制开发web程序(echarts)
 
整个过程的流程调度:hadoop生态圈中的azkaban工具

在这里插入图片描述

其中,需要强调的是:
系统的数据分析不是一次性的,而是按照一定的时间频率反复计算,因而整个处理链条中的各个环节需要按照一定的先后依赖关系紧密衔接,即涉及到大量任务单元的管理调度,所以,项目中需要添加一个任务调度模块。

数据展现
数据展现的目的是将分析所得的数据进行可视化,以便运营决策人员能更方便地获取数据,更快更简单地理解数据。
市面上有许多开源的数据可视化软件、工具。比如Echarts.

在这里插入图片描述

模块开发----数据采集

在网站web流量日志分析这种场景中,对数据采集部分的可靠性、容错能力要求通常不会非常严苛,因此使用通用的flume日志采集框架完全可以满足需求。

Flume日志采集系统

Flume采集系统的搭建相对简单:
1、在服务器上部署agent节点,修改配置文件
2、启动agent节点,将采集到的数据汇聚到指定的HDFS目录中
针对nginx日志生成场景,如果通过flume(1.6)收集,无论是Spooling Directory Source和Exec Source均不能满足动态实时收集的需求,在当前flume1.7稳定版本中,提供了一个非常好用的TaildirSource,使用这个source,可以监控一个目录,并且使用正则表达式匹配该目录中的文件名进行实时收集。
核心配置如下:

a1.sources = r1
a1.sources.r1.type = TAILDIR
a1.sources.r1.channels = c1
a1.sources.r1.positionFile = /var/log/flume/taildir_position.json(记录文件采集到了哪里)
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.filegroups.f1 = /var/log/test1/example.log
a1.sources.r1.filegroups.f2 = /var/log/test2/.*log.*

filegroups:指定filegroups,可以有多个,以空格分隔;(TailSource可以同时监控tail多个目录中的文件)
positionFile:配置检查点文件的路径,检查点文件会以json格式保存已经tail文件的位置,解决了断点不能续传的缺陷。
filegroups.:配置每个filegroup的文件绝对路径,文件名可以用正则表达式匹配
通过以上配置,就可以监控文件内容的增加和文件的增加。产生和所配置的文件名正则表达式不匹配的文件,则不会被tail。

数据内容样例(文件在 input access.log)

58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] “GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1” 304 0 “http://blog.fens.me/nodejs-socketio-chat/” “Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0”
字段解析:

1、访客ip地址: 58.215.204.118
2、访客用户信息: - -
3、请求时间:[18/Sep/2013:06:51:35 +0000]
4、请求方式:GET
5、请求的url:/wp-includes/js/jquery/jquery.js?ver=1.10.2
6、请求所用协议:HTTP/1.1
7、响应码:304
8、返回的数据流量:0
9、访客的来源url:http://blog.fens.me/nodejs-socketio-chat/
10、访客所用浏览器:Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0

模块开发----数据预处理

主要目的

过滤“不合规”数据,清洗无意义的数据
格式转换和规整
根据后续的统计需求,过滤分离出各种不同主题(不同栏目path)的基础数据。
在这里插入图片描述

实现方式(略)
开发一个mr程序WeblogPreProcess

运行mr对数据进行预处理
hadoop jar weblog.jar cn.itcast.bigdata.hive.mr.WeblogPreProcess /weblog/input /weblog/preout

3. 点击流模型数据梳理
由于大量的指标统计从点击流模型中更容易得出,所以在预处理阶段,可以使用mr程序来生成点击流模型的数据。

点击流模型pageviews表
Pageviews表模型数据生成, 详细见:ClickStreamPageView.java
在这里插入图片描述

在这里插入图片描述

此时程序的输入数据源就是上一步骤我们预处理完的数据。经过此不处理完成之后的数据格式为:在这里插入图片描述

3.2. 点击流模型visit信息表
注:“一次访问”=“N次连续请求”
直接从原始数据中用hql语法得出每个人的“次”访问信息比较困难,可先用mapreduce程序分析原始数据得出“次”信息数据,然后再用hql进行更多维度统计
用MR程序从pageviews数据中,梳理出每一次visit的起止时间、页面信息
详细代码见工程:ClickStreamVisit.java
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43924642/article/details/89575328
今日推荐