需求说明:

由于cdn收费是按照最高带宽收费的,但是公司平台平均使用cdn带宽为100M多,但是有几个时间点的带宽,突然涨到300M,但是不到5分钟就回落下来了,但就是为5分钟的高出的带宽,公司就要多付费用,不划算,所以要配合研发分析峰值左右前后5分钟的url访问次数,定位问题!


cdn流量图如下:

wKioL1RTA66DqRavAAGSPt1IPvo698.jpg


目标:通过分析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


wKioL1RW4HnSasj2AAVjhkXV2Yw662.jpg