一、 课程计划 1
二、 网站流量日志数据分析系统 2
1. 点击流数据模型 2
1.1. 点击流概念 2
1.2. 点击流模型生成 3
2. 如何进行网站流量分析 4
2.1. 网站流量分析模型举例 5
2.2. 流量分析常见分类 8
三、 整体技术流程及架构 14
1. 数据处理流程 14
2. 系统的架构 15
3. 数据展现 16
四、 模块开发----数据采集 17
1. 需求 17
2. Flume日志采集系统 17
2.1. Flume采集 17
2.2. 数据内容样例 18
五、 模块开发----数据预处理 19
1. 主要目的 19
2. 实现方式 19
3. 点击流模型数据梳理 20
3.1. 点击流模型pageviews表 20
3.2. 点击流模型visit信息表 21
六、 工作流调度器 22
1. 工作流调度系统产生背景 22
2. 工作流调度实现方式 22
3. Azkaban调度器 23
3.1. Azkaban介绍 23
3.2. Azkaban安装部署 23
3.3. Azkaban实战 30
点击流(Click Stream)是指用户在网站上持续访问的轨迹。这个概念更注重用户浏览网站的整个流程。用户对网站的每次访问包含了一系列的点击动作行为,这些点击行为数据就构成了点击流数据(Click Stream Data),它代表了用户浏览网站的整个流程。
点击流和网站日志是两个不同的概念,点击流是从用户的角度出发,注重用户浏览网站的整个流程;而网站日志是面向整个站点,它包含了用户行为数据、服务器响应数据等众多日志信息,我们通过对网站日志的分析可以获得用户的点击流数据。
网站是由多个网页(Page)构成,当用户在访问多个网页时,网页与网页之间是靠Referrers参数来标识上级网页来源。由此,可以确定网页被依次访问的顺序,当然也可以通过时间来标识访问的次序。其次,用户对网站的每次访问,可视作是一次会话(Session),在网站日志中将会用不同的Sessionid来唯一标识每次会话。如果把Page视为“点”的话,那么我们可以很容易的把Session描绘成一条“线”,也就是用户的点击流数据轨迹曲线。
图:点击流概念模型
点击流数据在具体操作上是由散点状的点击日志数据梳理所得。点击数据在数据建模时存在两张模型表Pageviews和visits,例如:
原始访问日志表
时间戳
请求URL
Referal
响应吗
……………
101.0.0.2
/b/...
304
2012-01-01 15:17:11
/d/...
404
页面点击流模型Pageviews表
这个模型强调的是对一个用户的一次访问session的信息识别
时间
访问页面URL
停留时长
第几步
10
/b/....
110
2
/e/....
2012-01-01 15:35:06
20
点击流模型Visits表(按session聚集的页面访问信息)
强调的是一次访问session内的起始与结束时间点的情况
起始时间
结束时间
进入页面
离开页面
访问页面数
IP
referal
2012-01-01 15:19:23
流量分析整体来说是一个内涵非常丰富的体系,整体过程是一个金字塔结构:
金字塔的顶部是网站的目标:投资回报率(ROI)。
网站流量质量分析(流量分析)
流量对于每个网站来说都是很重要,但流量并不是越多越好,应该更加看重流量的质量,换句话来说就是流量可以为我们带来多少收入。
X轴代表量,指网站获得的访问量。Y轴代表质,指可以促进网站目标的事件次数(比如商品浏览、注册、购买等行为)。圆圈大小表示获得流量的成本。
BD流量是指商务拓展流量。一般指的是互联网经过运营或者竞价排名等方式,从外部拉来的流量。比如电商网站在百度上花钱来竞价排名,产生的流量就是BD流量的一部分。
网站流量多维度细分(流量分析)
细分是指通过不同维度对指标进行分割,查看同一个指标在不同维度下的表现,进而找出有问题的那部分指标,对这部分指标进行优化。
网站内容及导航分析(内容分析)
对于所有网站来说,页面都可以被划分为三个类别:
导航页、功能页、内容页
导航页的目的是引导访问者找到信息,功能页的目的是帮助访问者完成特定任务,内容页的目的是向访问者展示信息并帮助访问者进行 决策。
首页和列表页都是典型的导航页;
站内搜索页面、注册表单页面和购物车页面都是典型的功能页,
而产品详情页、新闻和文章页都是典型的内容页。
比如从内容导航分析中,以下两类行为就是网站运营者不希望看到的行为:
第一个问题:访问者从导航页(首页)还没有看到内容页面之前就从导航页离开网站,需要分析导航页造成访问者中途离开的原因。
第二个问题:访问者从导航页进入内容页后,又返回到导航页,说明需要分析内容页的最初设计,并考虑中内容页提供交叉的信息推荐。
网站转化以及漏斗分析(转化分析)
所谓转化,即网站业务流程中的一个封闭渠道,引导用户按照流程最终实现业务目标(比如商品成交);而漏斗模型则是指进入渠道的用户在各环节递进过程中逐渐流失的形象描述;
对于转化渠道,主要进行两部分的分析:
访问者的流失和迷失
造成流失的原因很多,如:
不恰当的商品或活动推荐
对支付环节中专业名词的解释、帮助信息等内容不当
造成迷失的主要原因是转化流量设计不合理,访问者在特定阶段得不到需要的信息,并且不能根据现有的信息作出决策,比如在线购买演唱会门票,直到支付也没看到在线选座的提示,这时候就很可能会产生迷失,返回查看。
总之,网站数据分析是一门内容非常丰富的学科,本课程中主要关注网站流量分析过程中的技术运用,更多关于网站数据分析的业务知识可学习文档首页推荐的资料。
指标是网站分析的基础,用来记录和衡量访问者在网站自的各种行为。比如我们经常说的流量就是一个网站指标,它是用来衡量网站获得的访问量。在进行流量分析之前,我们先来了解一些常见的指标。
骨灰级指标
IP:1天之内,访问网站的不重复IP数。一天内相同IP地址多次访问网站只被计算1次。曾经IP指标可以用来表示用户访问身份,目前则更多的用来获取访问者的地理位置信息。
PageView浏览量: 即通常说的PV值,用户每打开1个网站页面,记录1个PV。用户多次打开同一页面PV累计多次。通俗解释就是页面被加载的总次数。
Unique PageView: 1天之内,访问网站的不重复用户数(以浏览器cookie为依据),一天内同一访客多次访问网站只被计算1次。
基础级指标
访问次数:访客从进入网站到离开网站的一系列活动记为一次访问,也称会话(session),1次访问(会话)可能包含多个PV。
网站停留时间:访问者在网站上花费的时间。
页面停留时间:访问者在某个特定页面或某组网页上所花费的时间。
复合级指标
人均浏览页数:平均每个独立访客产生的PV。人均浏览页数=浏览次数/独立访客。体现网站对访客的吸引程度。
跳出率:指某一范围内单页访问次数或访问者与总访问次数的百分比。其中跳出指单页访问或访问者的次数,即在一次访问中访问者进入网站后只访问了一个页面就离开的数量。
退出率:指某一范围内退出的访问者与综合访问量的百分比。其中退出指访问者离开网站的次数,通常是基于某个范围的。
有了上述这些指标之后,就能结合业务进行各种不同角度的分类分析,主要是以下几大方面:
基础分析(PV,IP,UV)
来源分析
受访分析
访客分析
转化路径分析
转化定义:
访客在您的网站完成了某项您期望的活动,记为一次转化,如注册、下载、购买。
目标示例:
·获得用户目标:在线注册、创建账号等。
·咨询目标:咨询、留言、电话等。
·互动目标:视频播放、加入购物车、分享等。
·收入目标:在线订单、付款等。
路径分析:
根据设置的特定路线,监测某一流程的完成转化情况,算出每步的转换率和流失率数据,如注册流程,购买流程等。
转化类型:
网站流量日志数据分析是一个纯粹的数据分析项目,其整体流程基本上就是依据数据的处理流程进行。有以下几个大的步骤:
数据采集概念,目前行业会有两种解释:一是数据从无到有的过程(web服务器打印的日志、自定义采集的日志等)叫做数据采集;另一方面也有把通过使用Flume等工具把数据采集到指定位置的这个过程叫做数据采集。
关于具体含义要结合语境具体分析,明白语境中具体含义即可。
通过mapreduce程序对采集到的原始日志数据进行预处理,比如清洗,格式整理,滤除脏数据等,并且梳理成点击流模型数据。
将预处理之后的数据导入到HIVE仓库中相应的库和表中。
项目的核心内容,即根据需求开发ETL分析语句,得出各种统计结果。
将分析所得数据进行数据可视化,一般通过图表进行展示。
相对于传统的BI数据处理,流程几乎差不多,但是因为是处理大数据,所以流程中各环节所使用的技术则跟传统BI完全不同:
其中,需要强调的是:
系统的数据分析不是一次性的,而是按照一定的时间频率反复计算,因而整个处理链条中的各个环节需要按照一定的先后依赖关系紧密衔接,即涉及到大量任务单元的管理调度,所以,项目中需要添加一个任务调度模块。
数据展现的目的是将分析所得的数据进行可视化,以便运营决策人员能更方便地获取数据,更快更简单地理解数据。
市面上有许多开源的数据可视化软件、工具。比如Echarts.
在网站web流量日志分析这种场景中,对数据采集部分的可靠性、容错能力要求通常不会非常严苛,因此使用通用的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.<filegroupName>:配置每个filegroup的文件绝对路径,文件名可以用正则表达式匹配
通过以上配置,就可以监控文件内容的增加和文件的增加。产生和所配置的文件名正则表达式不匹配的文件,则不会被tail。
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)的基础数据。
public class WeblogPreProcess {
static class WeblogPreProcessMapper extends Mapper<LongWritable, Text, Text, NullWritable> {
Text k = new Text();
NullWritable v = NullWritable.get();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
WebLogBean webLogBean = WebLogParser.parser(line);
//WebLogBean productWebLog = WebLogParser.parser2(line);
//WebLogBean bbsWebLog = WebLogParser.parser3(line);
//WebLogBean cuxiaoBean = WebLogParser.parser4(line);
if (!webLogBean.isValid())
return;
k.set(webLogBean.toString());
context.write(k, v);
//k.set(productWebLog);
//context.write(k, v);
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
job.setJarByClass(WeblogPreProcess.class);
job.setMapperClass(WeblogPreProcessMapper.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
hadoop jar weblog.jar cn.itcast.bigdata.hive.mr.WeblogPreProcess /weblog/input /weblog/preout
由于大量的指标统计从点击流模型中更容易得出,所以在预处理阶段,可以使用mr程序来生成点击流模型的数据。
Pageviews表模型数据生成, 详细见:ClickStreamPageView.java
此时程序的输入数据源就是上一步骤我们预处理完的数据。经过此不处理完成之后的数据格式为:
注:“一次访问”=“N次连续请求”
直接从原始数据中用hql语法得出每个人的“次”访问信息比较困难,可先用mapreduce程序分析原始数据得出“次”信息数据,然后再用hql进行更多维度统计
用MR程序从pageviews数据中,梳理出每一次visit的起止时间、页面信息