需求說明:
由於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