Какой лучший способ подсчета уникальных посетителей с Hadoop? - PullRequest
9 голосов
/ 22 мая 2010

Привет всем, только начинайте работать с 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

и для каждого сайта, который вы хотелиузнать уникальных посетителей для каждого сайта?

Я думал, что маппер выдаст siteID \ t username, а редуктор сохранит set () уникальных имен пользователей для каждого ключа, а затем выдаст длину этого набора.Однако это потенциально может хранить миллионы имен пользователей в памяти, что кажется неправильным.У кого-нибудь есть способ получше?

Кстати, я использую потоковую передачу Python

спасибо

Ответы [ 4 ]

3 голосов
/ 22 мая 2010

Вы можете сделать это как 2-этапную операцию:

Первый шаг, испустите (username => siteID), и пусть редуктор просто свернет несколько вхождений siteID с помощью set - так как у вас обычно будет гораздо меньше сайтов, чем у пользователей, это должно быть хорошо.

Затем на втором шаге вы можете запустить (siteID => username) и выполнить простой подсчет, поскольку дубликаты были удалены.

1 голос
/ 26 мая 2010

Мой подход подобен тому, что дал цаман с небольшим поворотом

  1. Вывод карты: (имя пользователя, siteid) => ("")
  2. уменьшить вывод: (siteid) => (1)
  3. карта: удостоверение личности
  4. уменьшить: longsumreducer (т.е. просто суммировать)

Обратите внимание, что первое сокращение не должно проходить ни одну из записей, которые будут представлены. Вы можете просто проверить ключ и произвести вывод.

НТН

1 голос
/ 24 мая 2010

Используйте вторичную сортировку для сортировки по идентификатору пользователя. Таким образом, вам не нужно иметь что-либо в памяти - просто передавайте данные и увеличивайте свой счетчик каждый раз, когда вы видите изменение значения для определенного идентификатора сайта.

Вот некоторая документация .

0 голосов
/ 07 сентября 2011

Часто быстрее использовать HiveQL для сортировки множества простых задач. Hive переведет ваши запросы в Hadoop MapReduce. В этом случае вы можете использовать

SELECT COUNT(DISTINCT username) FROM logviews

Более подробный пример вы можете найти здесь: http://www.dataminelab.com/blog/calculating-unique-visitors-in-hadoop-and-hive/

...