2010-05-21 3 views
9

hey alle, nur auf hadoop Sie beginnen und gespannt, was der beste Weg, in mapreduce Besucher zu zählen wäre, wenn Ihre Logfiles so aussah ...Was ist der beste Weg, um einzigartige Besucher mit Hadoop zu zählen?

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 

und für jede Website, die Sie das herausfinden wollte, einzigartige Besucher für jede Seite?

Ich dachte, der Mapper würde SiteID \ t Benutzername emittieren und der Reducer würde ein set() der eindeutigen Benutzernamen pro Schlüssel behalten und dann die Länge dieses Satzes ausgeben. Dies würde jedoch potenziell Millionen von Benutzernamen im Speicher speichern, was nicht richtig erscheint. Jeder hat einen besseren Weg?

Ich verwende Python-Streaming von der Art und Weise

dank

Antwort

3

Sie es als eine Operation 2-stufig tun könnte:

Erster Schritt emittieren (username => siteID) und haben die Minderer nur mehrere kollabieren Vorkommen von Site-ID mit einem set - da Sie normalerweise weit weniger Websites als Benutzer haben, sollte dies in Ordnung sein.

Dann im zweiten Schritt können Sie ausgeben und eine einfache Zählung durchführen, da die Duplikate entfernt wurden.

1

Verwenden Sie die sekundäre Sortierung, um die Benutzer-ID zu sortieren. Auf diese Weise müssen Sie nichts im Speicher haben - streamen Sie einfach die Daten durch und erhöhen Sie den Zähler, wenn Sie die Wertänderung für eine bestimmte Site-ID sehen.

Hier sind einige documentation.

1

Mein aproach ist ähnlich dem, was tzaman mit einem kleinen Twist gab

  1. Karte Ausgabe: (Benutzername, siteid) => ("")
  2. reduzieren Ausgang: (siteid) => (1)
  3. Karte: Identität Mapper
  4. reduzieren: longsumreducer (dh zusammenfassen einfach)

Beachten Sie, dass die erste eine der r gehen nicht reduzieren müssen Akkorde wird präsentiert. Sie können den Schlüssel einfach untersuchen und die Ausgabe erzeugen.

HTH

Verwandte Themen