繁体   English   中英

使用Hadoop统计独特访客的最佳方式是什么?

[英]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给出的一点点扭曲

  1. map输出:(username,siteid)=>(“”)
  2. 减少输出:(siteid)=>(1)
  3. map:身份映射器
  4. 减少:longsumreducer(即简单总结)

请注意,第一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM