/ / Esempio di partizionamento personalizzato - hadoop, mapreduce, partitioning

Esempio di partizionamento personalizzato - hadoop, mapreduce, partitioning

Sto cercando di scrivere un nuovo lavoro Hadoop per l'inputdati che sono in qualche modo distorti. Un'analogia per questo sarebbe l'esempio di conteggio delle parole nel tutorial Hadoop, tranne per il fatto che una parola particolare è presente molte volte.

Voglio avere una funzione di partizione in cui questa chiave sarà mappata a più riduttori e chiavi rimanenti in base al loro normale parsing di hash. È possibile?

Grazie in anticipo.

risposte:

5 per risposta № 1

Non pensare che in Hadoop possa esserlo la stessa chiavemappato a più riduttori. Ma le chiavi possono essere partizionate in modo che i riduttori siano caricati più o meno uniformemente. Per questo, i dati di input devono essere campionati e le chiavi devono essere partizionate in modo appropriato. Controlla il Yahoo Paper per maggiori dettagli sul partizionatore personalizzato. Il codice di ordinamento di Yahoo è nel org.apache.hadoop.examples.terasort pacchetto.

Diciamo che la chiave A ha 10 righe, B ha 20 righe, C ha30 righe e D ha 60 righe nell'input. Quindi i tasti A, B, C possono essere inviati al riduttore 1 e la chiave D può essere inviata al riduttore 2 per rendere uniformemente distribuito il carico sui riduttori. Per suddividere le chiavi, è necessario eseguire un campionamento per sapere come vengono distribuite le chiavi.

Ecco alcuni suggerimenti per rendere il lavoro completo più veloce.

Specificare a Combiner sul JobConf per ridurre il numero di chiavi inviate al riduttore. Ciò riduce anche il traffico di rete tra il mappatore e le attività di riduzione. Sebbene, non vi è alcuna garanzia che il combinatore sarà invocato dal framework Hadoop.

Inoltre, poiché i dati sono distorti (alcuni dei tasti vengono ripetuti ancora e ancora, diciamo "strumenti"), potresti voler aumentare il numero di attività ridotte per completare il lavoro più velocemente. Ciò garantisce che mentre un riduttore elabora "strumenti", gli altri dati vengono elaborati parallelamente da altri riduttori.


1 per risposta № 2

Se si suddividono i dati su più riduttori per motivi di prestazioni, è necessario un secondo riduttore per aggregare i dati nel set di risultati finale.

Hadoop ha una funzionalità integrata che fa qualcosa del genere: il combinatore.

Il combinatore è una sorta di "riduttore" di funzionalità. Ciò garantisce che all'interno dell'attività della mappa possa essere effettuata una riduzione parziale dei dati e in tal modo riduce il numero di record che devono essere elaborati in seguito.

Nell'esempio base di parole, il combinatore èesattamente come il riduttore. Si noti che per alcuni di questi algoritmi è necessaria un'implementazione diversa. Ho anche avuto un progetto in cui un combinatore non era possibile a causa dell'algoritmo.