[英]What's the best way to count unique visitors with Hadoop?
嘿所有,刚刚开始使用hadoop并且很好奇如果你的日志文件看起来像这样,mapreduce的最佳方式是计算唯一访问者...
DATE siteID action username
05-05-2010 siteA pageview jim
05-05-2010 siteB pageview tom
05-05-2010 siteA pageview jim
05-05-2010 siteB pageview bob
05-05-2010 siteA pageview mike
对于每个网站,您想要找出每个网站的唯一身份访问者?
我以为mapper会发出siteID \\ t用户名,reducer会为每个键保留一个唯一用户名的set(),然后发出该组的长度。 然而,这可能会在内存中存储数百万个用户名,这似乎并不正确。 谁有更好的方法?
我顺便使用python流
谢谢
您可以将其作为两阶段操作:
第一步,发出(username => siteID)
,让reducer只使用一个set
折叠多次出现的siteID - 因为你的网站通常比用户少得多,这应该没问题。
然后在第二步中,您可以发出(siteID => username)
并执行简单计数,因为已删除重复项。
使用辅助排序对用户标识进行排序。 这样,您不需要在内存中有任何内容 - 只需流式传输数据,并在每次看到特定站点ID的值更改时递增您的独特计数器。
这是一些文档 。
我的aproach类似于tzaman给出的一点点扭曲
请注意,第一个reduce不需要遍历任何记录。 您只需检查密钥并生成输出即可。
HTH
使用HiveQL对许多简单任务进行排序通常会更快。 Hive会将您的查询转换为Hadoop MapReduce。 在这种情况下,您可以使用
SELECT COUNT(DISTINCT username) FROM logviews
您可以在这里找到更高级的示例: http : //www.dataminelab.com/blog/calculating-unique-visitors-in-hadoop-and-hive/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.