2010-05-21 11 views
9

hey tout juste de commencer sur Hadoop et curieux quelle est la meilleure façon MapReduce serait de compter les visiteurs uniques si vos fichiers journaux avaient l'air comme ça ...Quelle est la meilleure façon de compter les visiteurs uniques avec Hadoop?

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 

et pour chaque site que vous vouliez savoir la visiteurs uniques pour chaque site?

Je pensais que le mappeur émettrait le nom d'emplacement du site et le réducteur conserverait un set() des noms d'utilisateurs uniques par clé, puis émettrait la longueur de cet ensemble. Cependant, cela pourrait potentiellement stocker des millions de noms d'utilisateur dans la mémoire, ce qui ne semble pas correct. Quelqu'un a un meilleur moyen?

J'utilise le streaming de python par la façon dont

grâce

Répondre

3

Vous pouvez le faire comme une opération 2 étapes:

Première étape, émettre (username => siteID), et ont le réducteur effondrer juste multiple occurrences de siteID en utilisant un set - puisque vous auriez généralement beaucoup moins de sites que les utilisateurs, cela devrait être bon.

Ensuite, dans la deuxième étape, vous pouvez émettre (siteID => username) et faire un compte simple, puisque les doublons ont été supprimés.

1

Utilisez le tri secondaire pour trier les ID utilisateur. De cette façon, vous n'avez besoin de rien en mémoire - il vous suffit de diffuser les données et d'incrémenter votre compteur distinct chaque fois que vous voyez le changement de valeur pour un identifiant de site particulier.

Voici quelques documentation.

1

Mon aproche est semblable à ce que tzaman a donné une petite torsion

  1. sortie carte: (nom d'utilisateur, siteid) => ("")
  2. réduire la production: (siteid) => (1)
  3. carte: identité mappeur
  4. réduire: longsumreducer (ie simplement résumé)

Notez que le premier ne réduire pas besoin d'aller sur l'un des r ecords est présenté. Vous pouvez simplement examiner la clé et produire la sortie.

HTH