2012-08-22 3 views
6

Wie kann ich einen bestimmten Datensatz an alle meine Reduzierstücke senden?Hadoop-Sendebericht an alle Reduzierungen

Ich kenne die Partitioner-Klasse und was sie tut, aber ich sehe keinen einfachen Weg, um sicherzustellen, dass ein Datensatz zu allen Reduzierungen geht.

Grundsätzlich hat das Partitionierungsprogramm diese Methode:

int getPartition(K2 key, 
      V2 value, 
      int numPartitions) 

Meine erste Idee, das Partitionierungsprogramm und der Mapper zu haben war die Zusammenarbeit wie folgt: Der Mapper hält den Rekord mehrere Male gleich der Anzahl Ausgeben von verringern Aufgaben und die Partitionierung gibt alle Ints zurück (von 0 bis numPartitions-1), auf diese Weise wird sichergestellt, dass der Datensatz alle Partitionen erreicht.

Gibt es andere, klügere Möglichkeiten, dies zu lösen? Zum Beispiel gebe ich -1 für die Datensätze zurück, die ich an alle Partitionen senden muss, und das Framework macht das für mich, wenn es die zurückgegebene -1 sieht.

Antwort

5

Der Partitionierer funktioniert nicht so. Seine Aufgabe besteht darin, den Schlüssel (normalerweise) und den Wert (selten) zu betrachten, um festzustellen, an welchen Reduzierer das Paar gesendet werden soll. Dies geschieht nach dem Mapper und vor dem Reducer.

Stattdessen sollten Sie (der Mapper) in der Lage sein, den Kontext nach der Konfiguration zu fragen, die die Gesamtzahl der Reduzierungen (Partitionen) beantworten kann. Ihr Mapper kann dann einen komplexen Schlüssel ausgeben, der den tatsächlichen Schlüssel und eine Partitionsnummer enthält. Sie wissen, wie oft Sie dies ausschreiben, weil der Mapper die Anzahl der Reduzierungen herausfinden kann (siehe oben). Der Partitionierer muss lediglich den zusammengesetzten Schlüsselwert aufschlüsseln, den Zielreduzierer-Index extrahieren und diesen Index zurückgeben.

Das bedeutet übrigens, dass wenn Sie diese Technik verwenden, um Zählungen zu senden (wenn Sie sortieren) oder andere Metadaten, die später in der Verarbeitung verwendet werden, müssen Ihre realen Datenschlüssel der gleichen Zusammensetzung folgen Format. In der Tat müssen Sie wahrscheinlich in den zusammengesetzten Schlüssel einen Indikator einbeziehen, der die Art des Schlüssel/Wert-Paares beschreibt (z. B. 1 = echte Daten, 0 = Verarbeitungsmetadaten).

+0

Ich muss auch diese Antwort in Bezug auf die Gruppenkomparator aktualisieren, die Sie benötigen werden. –

+0

So dachte ich auch. Ich habe es nicht sehr klar beschrieben und ich habe auch darüber nachgedacht, einen Zähler im Partitionierer-Objekt zu haben, um zu verfolgen, was die nächste Partition ist, die es zurückgeben muss. Ich bin mir jedoch nicht sicher, ob dies eine Lösung ist, weil das Partitionierer-Objekt möglicherweise GC-edig und der Zähler zurückgesetzt wird. In Bezug auf die Gruppierung Komparator denke ich, das hängt von meinen Anforderungen, die ich nicht beschrieben habe. Ich werde bei Bedarf wiederkommen. Danke! – Razvan

Verwandte Themen