是否有一个pig udf可以计算网络日志中的时间差?
假设我有以下格式的博客:
10.171.100.10 - - [12/Jan/2012:14:39:46 +0530] "GET /amazon/navigator/index.php
HTTP/1.1" 200 402 "someurl/page1" "Mozilla/4.0 (
compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 3.0.4506
.2152; MS-RTC LM 8; .NET CLR 3.5.30729; .NET CLR 2.0.50727)"
10.171.100.10 - - [12/Jan/2012:14:41:47 +0530] "GET /amazon/header.php HTTP/1.1
" 200 4376 "someurl/page2" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 3.0.450
6.2152; MS-RTC LM 8; .NET CLR 3.5.30729; .NET CLR 2.0.50727)"
10.171.100.10 - - [12/Jan/2012:14:44:15 +0530] "GET /amazon/navigator/navigator
.php HTTP/1.1" 200 912 "someurl/page3" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET
CLR 3.0.4506.2152; MS-RTC LM 8; .NET CLR 3.5.30729; .NET CLR 2.0.50727)"
具有ip的用户 10.171.100.10
访问 somurl/page1 at 12/Jan/2012:14:39:46
(weblogs中的第一个条目)。下一个访问的用户 someurl/page2
在 12/Jan/2012:14:41:47
. 所以,用户在page1上停留了2mts 1秒。同样,用户在page2上停留了2mts 28秒(14.44:15-14:41.47)。我不在乎用户在第3页上停留了多长时间,因为我没有什么可以比较的。输出可以是:
10.171.100.10 someurl/page1 121 sec
10.171.100.10 someurl/page2 148 sec etc ..
网络日志将有数百万行和ip的将不一定是在一个排序的顺序。有没有关于如何使用pig-udf或其他技术的建议?
1条答案
按热度按时间nbewdwxp1#
我不知道任何函数在默认情况下会使用以下行的内容来生成一些内容,因为序列是可变的,因此非常不可靠。
你必须写你自己的自定义项。要优化计算(如果有数十亿行),您可能需要
ORDER
由IP
以及date
,和GROUP
您的数据集由IP
在每个ip(或ip组)上启动mapreduce作业之前,确保与特定ip对应的所有行都由同一节点处理。另外,我建议您对计算页面所用时间的规则考虑得更久一点:用户何时仍处于活动状态,何时返回?你可能会得到很长的时间范围。