1、Web日志分析
从Web日志中,我们可以获取网站各类页面的PV值(PageView,页面访问量),访问IP;或者是用户停留时间最长的页面等等,更复杂的,可以分析用户行为特征。
在Web日志中,每条日志都代表用户的一次访问行为,以下面的一条日志为例子:
60.208.6.156 - - [18/Sep/2013:06:49:48 +0000] "GET /wp-content/uploads/2013/07/rcassandra.png HTTP/1.0" 200 185524 "http://cos.name/category/software/packages/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"可以 拆分为8个变量:
remote_addr:60.208.6.156//用户IP地址
remote_user:- //用户名称
time_local:[18/Sep/2013:06:49:48 +0000]//记录访问时间
request:"GET /wp-content/uploads/2013/07/rcassandra.png HTTP/1.0"//记录访问的url与http协议
status:200 //记录请求状态,成功是200
body_bytes_sent:185524//记录发给客户端内容的大小
http_referer:"http://cos.name/category/software/packages/"//记录从哪个页面访问过来的
http_user_agent:"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"//记录客户浏览器的信息
2、KPI指标设计
一般的KPI指标可以设置为:
PV:页面访问量统计
IP:页面独立IP访问数量统计
Time:每小时用户访问数量统计
Source:用户来源域名的统计
Brower:用户访问设备的统计
3、hadoop算法实现
PV:页面访问量统计
Map过程:key: request,value: 1
Reduce过程:key:request,value(求和)
IP:页面独立IP访问数量统计
Map过程:key: request,value: remote_addr
Reduce过程:key:request,value(去重再求和)
Time:每小时用户访问数量统计
Map过程:key: time_local,value: 1
Reduce过程:key:time_local,value(求和)
Map过程:key: http_referer,value: 1
Reduce过程:key:http_referer,value(求和)
Brower:用户访问设备的统计
Map过程:key: http_user_agent,value: 1
Reduce过程:http_user_agent,value(求和)
下面以PV(页面访问量统计)为例,设计MapReduce程序
4、MapReduce程序实现
1).对日志解析
2).Map过程
3).Reduce过程
KPI.java
KPIPV.java
5、eclipse启动程序
设置输入 输出目录
hdfs://localhost:9000/user/root/access.log.10 hdfs://localhost:9000/user/root/output9
6、结果输出
/r-rserve-nodejs/?cf_action=sync_comments&post_id=1769<span style="white-space:pre"> </span>5 /r-rserve-nodejs/feed/<span style="white-space:pre"> </span>1 /r-rstudio-server/<span style="white-space:pre"> </span>2 /r-rstudio-server/?cf_action=sync_comments&post_id=1506<span style="white-space:pre"> </span>2 /rhadoop-demo-email/<span style="white-space:pre"> </span>3 /rhadoop-demo-email/?cf_action=sync_comments&post_id=308<span style="white-space:pre"> </span>1 /rhadoop-hadoop<span style="white-space:pre"> </span>2 /rhadoop-hadoop/<span style="white-space:pre"> </span>10 /rhadoop-hadoop/?cf_action=sync_comments&post_id=87<span style="white-space:pre"> </span>2 /rhadoop-hadoop/feed/<span style="white-space:pre"> </span>1 /rhadoop-hbase-rhase/<span style="white-space:pre"> </span>4 /rhadoop-hbase-rhase/?cf_action=sync_comments&post_id=97<span style="white-space:pre"> </span>2 /rhadoop-hbase-rhase/feed/<span style="white-space:pre"> </span>1 /rhadoop-java-basic/<span style="white-space:pre"> </span>3
源代码及数据:https://github.com/y521263/Hadoop_in_Action
参考资料:
http://blog.fens.me/hadoop-mapreduce-log-kpi/