需求说明:
由于cdn收费是按照最高带宽收费的,但是公司平台平均使用cdn带宽为100M多,但是有几个时间点的带宽,突然涨到300M,但是不到5分钟就回落下来了,但就是为5分钟的高出的带宽,公司就要多付费用,不划算,所以要配合研发分析峰值左右前后5分钟的url访问次数,定位问题!
cdn流量图如下:
目标:通过分析cdn日志中10点整到10点50之间的url访问次数,来判定故障源!
具体实现方式:
#以","为分割符,加载日志文件大排变量a
grunt> a = load '/user/hadoop/input/16456_2014102710_enclf.log'
>> using PigStorage(' ')
>> AS (a1,a2,a3,time,a5,a6,url,a8);
#过滤一行日志,只要time,和url列
grunt> b = foreach a generate time, url;
#只要时间是:10:40到10:50之间的行
grunt> b1 = filter b by time matches '.*2014:10:(40|41|42|43|44|45|46|47|48|49|50).*';
ps:下面的用的正则表达式(任选一个):
grunt> b1 = filter b by time matches '\\[27/Oct/2014:(10:4[1-9]):.*';
#过滤出url
grunt> b2 = foreach b1 generate url;
grunt> c = group b2 by url;
#计算出相同url的访问次数;
grunt> d = foreach c generate group,COUNT($1);
#按照url访问次数从大到小排序
grunt> e = order d by $1 desc;
#显示变量e(结果)
grunt> dump e
#存储结果到hdfs相关目录中:
store e into '/user/hadoop/output/1027_1045.log';
ps:1027_1045.log 是一个目录,不是文件;
#把hdfs文件copy到本地目录中
copyToLocal 16456_2014102710_order.log /home/hadoop/.
#本地查看分析结果
[hadoop@node1 ~]$ cd 1027_1045.log
[hadoop@node1 1027_1045.log]$ cat part-r-00000 |more
本文转自 shine_forever 51CTO博客,原文链接:http://blog.51cto.com/shineforever/1571124