猪udf计算博客的时差

时间:2013-02-18 05:02:35

标签: hadoop user-defined-functions hive apache-pig hdfs

是否有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(网络日志中的第一个条目)。下一位用户在someurl/page2访问了12/Jan/2012:14:41:47。因此,用户在第1页停留2毫秒1秒。同样,用户在第2页停留2分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 个答案:

答案 0 :(得分:0)

我不知道任何默认使用后续行中的内容生成某些内容的函数,因为序列是可变的,因此非常不可靠。

您必须编写自己的UDF。要优化计算(如果您有数十亿行),您可能需要ORDER IPdate以及GROUP数据集IP在每个IP(或IP组)上启动MapReduce作业之前,确保对应于特定IP的所有行都由同一节点处理。

另外,我建议你多考虑一下你想用来计算在页面上花费的时间的规则:用户何时仍处于活动状态以及何时用户返回?你最终可能会有很长的时间范围。