hey alle, wir fangen gerade erst mit hadoop an und sind gespannt, was der beste Weg in mapreduce wäre, einzigartige Besucher zu zählen, wenn deine Logfiles so aussehen ...
%Vor%und für jede Site wollten Sie die einzigartigen Besucher für jede Site herausfinden?
Ich dachte, der Mapper würde siteID \ t username ausgeben und der Reduzierer 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 benutze übrigens Python-Streaming
Danke
Sie können es als zweistufigen Vorgang ausführen:
Erster Schritt, geben Sie (username => siteID)
aus und lassen Sie den Reduzierer einfach mehrere Vorkommen von siteID mit einem set
reduzieren - da Sie normalerweise weit weniger Websites als Benutzer haben, sollte dies in Ordnung sein.
Dann können Sie im zweiten Schritt (siteID => username)
ausgeben und eine einfache Zählung durchführen, da die Duplikate entfernt wurden.
Mein Ansatz ist ähnlich dem, was Tzaman mit einer kleinen Drehung gab
Beachten Sie, dass die erste Reduzierung nicht über die Datensätze hinausgehen muss. Sie können einfach den Schlüssel untersuchen und die Ausgabe erzeugen.
HTH
Verwenden Sie die sekundäre Sortierung, um die Benutzer-ID zu sortieren. Auf diese Weise brauchen Sie nichts im Speicher zu haben - streamen Sie einfach die Daten durch und erhöhen Sie Ihren eindeutigen Zähler jedes Mal, wenn Sie die Wertänderung für eine bestimmte Site-ID sehen.
Hier sind einige Dokumentation .