打造基于hadoop的网站日志分析系统:(4)简单的日志导入与分析

原创
2014/07/03 21:22
阅读数 1.1K


事先说明,这次导入的不是原始的系统日志,是我们技术人员自己开发的流量统计系统里的数据,但基本格式与原始数据差不多。

创建数据表:

//创建扩展表,扩展表的好处在于你执行drop table 时只删除原数据,不会删除原始数据
CREATE EXTERNAL TABLE weblog(
id string,

ip string,

url string,
referrer string,
urlflow string,
useragent string,
usercolordepth string,
userlanguages string,
userresolution string,
username string)
PARTITIONED BY (year string, month string) //使用年份和月份作为分区
row format delimited

fields terminated by '\|'//使用“|”作为默认分隔符

STORED AS TEXTFILE  

导入数据:

load data local inpath '/home/hadoop/20130206.txt' overwrite into table weblog partition(year='2013',month='2');

执行查询:select count(*) from weblog;

结果:

统计访问量最高的前10个URL:

select url,count(url) as num from weblog group by url order by num desc limit 10;

测试环境,只导入少量数据,结果还是不错的。


函数应用:

  1. parse_url 函数,可以分解url中的域名或查询参数,这使得我们对用户行为统计变得更加简单,比如之前我们统计访问最多的前10个url改成访问最多的前10个域名:


select parse_url(url,'HOST')  ,count( parse_url(url,'HOST') ) as num from weblog group by  parse_url(url,'HOST')   order by num desc limit 10;

2.编辑kpi分析:

前提我们的数据库里有一个文章和编辑id的对应表,呵呵一般cms系统都会有,如果没有,我只能说,高人~

创建表 

CREATE EXTERNAL TABLE articles(id string,title string,username string) 

row format delimited

fields terminated by '\|'//使用逗号作为默认分隔符

STORED AS TEXTFILE;

导入数据前面已经讲过了,不在赘述。

我们网站的内部咨询的id值是guid,因此只要使用regexp_extract函数,正则匹配出url中的id值即可。

得到当天访问最多的前10个页面的访问数量,标题,及相关编辑:

select nid,num,title,username
from (select nid,count(nid) as num 
from (select regexp_extract(url,'([A-Z0-9]{8}\-[A-Z0-9]{4}\-[A-Z0-9]{4}\-[A-Z0-9]{4}\-[A-Z0-9]{12})',1) as nid from weblog) as t1 group by nid order by num desc) as t2
join articles on (articles.id = concat("{",t2.nid,"}") ) limit 10;

运行结果:

由于sql语句比之前的相对复杂一点,我们可以看到hive是把它分成了几个map/reduce来进行的。

举一反三,其他的分析和这都差不多,用户在购物车了删除了一个商品,那么url里面肯定有一个商品id,有一个类似delete或remove的动作,那么我们就可以分析出每天最多被用户移除购物车的商品,等等。

刚开始玩大数据的时候,我只是觉得这东西挺好玩的,挺过瘾的。现在突然觉的好可怕,我在网上的所有活动都能被网站分析出来,被看的干干净净了,没有什么隐私了。



展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部