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.
Ich muss auch diese Antwort in Bezug auf die Gruppenkomparator aktualisieren, die Sie benötigen werden. –
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