Hadoop ha una libreria chiamata KeyFieldBasedPartitioner http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/KeyFieldBasedPartitioner.html
Utilizzando questa come opzione nel vostro lancio lavoro come il partizionamento per il tuo lavoro lo streaming permette di rompere la vostra uscita mapper in coppie chiave/valore e le chiavi vengono hash up insieme andando alla stessa riduttore e l'ordinamento compresi i valori http://hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#More+Usage+Examples
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D mapreduce.map.output.key.field.separator=. \
-D mapreduce.partition.keypartitioner.options=-k1,2 \
-D mapreduce.job.reduces=12 \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
Qui, -D stream.map.output.field.separator =. e -D stream.num.map.output.key.fields = 4 sono spiegati qui http://hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#Customizing+How+Lines+are+Split+into+Key%2FValue+Pairs in pratica sono come sono stati emessi i campi del mapper per definire le coppie chiave/valore.
I tasti di uscita della mappa del lavoro MapReduce sopra riportato hanno normalmente quattro campi separati da ".". Tuttavia, il framework MapReduce partiziona gli output della mappa dai primi due campi delle chiavi usando l'opzione -D mapreduce.partition.keypartitioner.options = -k1,2. Qui, -D mapreduce.map.output.key.field.separator =. specifica il separatore per la partizione. Ciò garantisce che tutte le coppie chiave/valore con gli stessi primi due campi nelle chiavi verranno partizionate nello stesso riduttore.
Ciò equivale in modo efficace a specificare i primi due campi come chiave primaria e i successivi due campi come secondario. La chiave primaria viene utilizzata per il partizionamento e la combinazione delle chiavi primarie e secondarie viene utilizzata per l'ordinamento.
Per fare un join è semplice come l'output dei campi dal tuo mapper e l'impostazione delle opzioni all'avvio della configurazione per i campi che sono le chiavi e il riduttore avrà tutti i tuoi valori uniti con chiave in modo appropriato . Se vuoi prendere i dati da più fonti, continua ad aggiungere più -input sulla riga di comando ... se sono lunghezze di input differenti, nel tuo mapper puoi riconoscerlo e creare un output in formato standard dal programma di mappatura.
fonte
2010-11-15 01:08:31