Hadoop pig udf用于计算网络日志中的时间差

Hadoop pig udf用于计算网络日志中的时间差,hadoop,user-defined-functions,hive,apache-pig,hdfs,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 .2

网络日志中是否有计算时间差的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
的用户于2012年1月12日14:39:46访问了
somurl/page1(网络日志中的第一个条目)。下一个用户访问了
someurl/page2
,访问时间为
12/Jan/2012:14:41:47
。因此,用户在page1上停留了2mts 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或任何其他技术进行此操作,有什么建议吗?

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

您必须编写自己的自定义项。要优化计算(如果有数十亿行),您可能需要按
IP
date
排序
,并按
IP
对数据集进行
分组,然后在每个IP(或IP组)上启动MapReduce作业确保与特定IP对应的所有行由同一节点处理


另外,我建议您再考虑一下计算页面花费时间的规则:用户何时仍然处于活动状态,何时返回?你可能会得到很长的时间范围。

你为此做了什么?