2016-08-03 5 views

Antwort

1

Die partitioner ist der wichtigste Mechanismus, um zu steuern, welche Schlüssel an einen bestimmten Reduzierer gesendet werden.

Partitionierung steuert die Partitionierung der Schlüssel der Zwischen- Kartenausgänge. Der Schlüssel (oder eine Teilmenge des Schlüssels) wird verwendet, um die Partition typischerweise durch eine Hash-Funktion abzuleiten. Die Gesamtanzahl der Partitionen ist identisch mit der Anzahl der Reduzierungsaufgaben für den Job. Damit wird gesteuert, welche der m Tasks den Zwischenschlüssel (und damit den Datensatz) zur Reduktion gesendet werden.

Der Standard ist die Partitionierer HashPartitoner, die die hashCode() des Schlüsselobjekts verwendet, um zu bestimmen, welche zu reduzieren wird eine bestimmte Taste gesendet.

In Ihrem Treiber können Sie eine andere Partitionierungs eingestellt werden:

job.setPartitionerClass(Class<? extends Partitioner> cls) 

Benutzerdefinierte Partitionierer die Partitioner<K2, V2>-Schnittstelle implementieren, die eine einzige Methode hat getPartition(KEY key, VALUE value, int numPartitions) die Umsetzung benötigt.

Zum Beispiel die HashPartitioner Implementierung von getPartition wie folgt aussieht:

public int getPartition(K2 key, V2 value,int numReduceTasks) { 
    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
} 
+0

Ok ... vielen Dank –

Verwandte Themen