Come da definizione "Il Combinatore può essere chiamato 0, 1 o più volte su ogni chiave tra il mappatore e il riduttore."
Voglio sapere che su quale base il framework mapreduce decide quante volte verrà avviato il cobiner.Su quali basi il framework mapreduce decide se lanciare un combinatore o meno
risposta
Semplicemente il numero di versamenti sul disco. L'ordinamento avviene dopo che lo MapOutputBuffer
è stato riempito, allo stesso tempo si svolgerà la combinazione.
È possibile ottimizzare il numero di fuoriuscite su disco con i parametri io.sort.mb
, io.sort.spill.percent
, io.sort.record.percent
- quelli sono anche spiegato nella documentazione (libri e risorse online).
Esempio per i numeri specifici di combinatore corre:
0 -> senza combinatore è stato definito
1 -> un combinatore è stato definito e il MapOutputBuffer riempito una volta
> 1 -> un combinatore è stato definito e MapOutputBuffer riempito più di una volta
Si noti che anche se il MapOutputBuffer
nev er si riempie completamente, questo buffer deve essere svuotato alla fine dello stadio della mappa e quindi attiva il combinatore per funzionare almeno una volta (se definito).
Prima di tutto, la risposta di Thomas Jungblut è ottima e mi ha dato una conferma. L'unica cosa che voglio aggiungere è che il Combiner sarà sempre eseguito almeno una volta per Mapper se definito, a meno che l'output del mapper sia vuoto o sia una singola coppia. Quindi avere il combinatore non eseguito nel mapper è possibile ma altamente improbabile.
Codice sorgente che ha la logica per richiamare il combinatore in base alle condizioni.
Linea 1950 - Linea 1955 https://github.com/apache/hadoop/blob/0b8a7c18ddbe73b356b3c9baf4460659ccaee095/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapred/MapTask.java
if (combinerRunner == null || numSpills < minSpillsForCombine) {
Merger.writeFile(kvIter, writer, reporter, job);
} else {
combineCollector.setWriter(writer);
combinerRunner.combine(kvIter, combineCollector);
}
Quindi combinatore viene eseguito se:
non è definito, e Se le fuoriuscite sono superiori minSpillsForCombine. minSpillForCombine è gestito dalla proprietà "mapreduce.map.combine.minspills" il cui valore predefinito è 3.
Grazie per la risposta, ho controllato la descrizione di questi parametri di configurazione nella guida definitiva, ora capisco il caso in cui verranno utilizzati più combinatori . Ma mi manca ancora il caso in cui nessun combinatore sarà lanciato. Puoi aiutarmi per favore? Capisco il caso d'uso di avere un numero insufficiente di record da combinare ma mi mancano le configurazioni per questo – banjara
La combinazione verrà sempre chiamata quando il buffer deve essere scaricato. Pertanto, alla fine della mappa, il combinatore (se definito) deve essere eseguito almeno una volta. Che tipo di problemi concreti stai affrontando? Ho modificato e aggiunto alcuni esempi per te –
Inorder per ottimizzare i miei lavori MR stavo pensando all'introduzione di Combiner e stavo studiando su di loro. Ho letto in molti blog che i Combinatori non sono garantiti per l'esecuzione (http://dataworld.blog.com/2013/04/30/just-a-little-about-combiner-of-mapreduce-framework/). Ho ancora una domanda, il combinatore è lanciato per Mapper o per macchina nodo dati ?? Ero solito credere che il combinatore fosse parte della fase di mappatura ma http://developer.yahoo.com/hadoop/tutorial/module4.html suggerisce che il combinatore sia lanciato per macchina.Potete aiutare per favore – banjara