2016-01-10 35 views
6

In Hadoop, se non è stato impostato il numero di riduttori, quanti quanti riduttori verranno creati?Numero predefinito di riduttori

Un numero simile di mapper dipende da (dimensione dati totale)/(dimensione di divisione dell'input), E.g. se la dimensione dei dati è di 1 TB e la dimensione di divisione dell'input è 100 MB. Quindi il numero di mapper sarà (1000 * 1000)/100 = 10000 (Diecimila).

Il numero del riduttore dipende da quali fattori? Quanti riduttori vengono creati per un lavoro?

+1

Il numero dei riduttori è 1 per impostazione predefinita, a meno che non lo si imposta a qualsiasi numero personalizzato che ha senso per la tua applicazione, usando 'job.setNumReduceTasks (n);'. Suggerirei di saltare le "regole generali" che esistono. – vefthym

+0

@vefthym è ancora vero? Ho dimenticato di specificare un numero qualsiasi e di avere 56 GB di dati, ed è stato diviso in 7 file da 8 GB ciascuno. C'è un fallback automatico se ci sono troppi dati per 1 riduttore? – Thomas

+0

@Thomas ti stai riferendo al numero di file di output o al numero di split di input? Il valore predefinito di 1 è per i file di output (ridurre le attività). Credo che sia ancora vero. Se non lo avevi programmato, avresti potuto anche impostarlo come parametro di runtime. – vefthym

risposta

8

Quanti riduce? (Da official documentation)

Il giusto numero di riduce sembra essere 0,95 o 1,75 moltiplicato per (n. Di nodi) * (n. Di contenitori massimo per nodo).

Con 0,95 tutte le riduzioni possono essere lanciate immediatamente e iniziare il trasferimento delle uscite della mappa quando le mappe finiscono.con 1.75 i nodi più veloci finiranno il loro primo round di riduzioni e lanciano una seconda ondata di riduzioni facendo un lavoro molto migliore di bilanciamento del carico

L'aumento del numero di riduzioni aumenta l'overhead del framework, ma aumenta il bilanciamento del carico e riduce il costo dei guasti.

I fattori di ridimensionamento di cui sopra sono leggermente inferiori rispetto ai numeri interi per riservare alcuni slot di riduzione nel framework per attività speculative e attività non riuscite.

Questo articolo riguarda anche il conteggio di Mapper.

Quante mappe?

Il numero di mappe è solitamente guidato dalla dimensione totale degli ingressi, cioè, il numero totale di blocchi di file di input.

Il giusto livello di parallelismo per le mappe sembra essere intorno a 10-100 mappe per-nodo, anche se è stato impostato fino a 300 mappe per compiti mappa molto cpu-luce. L'installazione delle attività richiede un po ', quindi è meglio se le mappe richiedono almeno un minuto per l'esecuzione.

Così, se aspettare 10 TB di dati in ingresso e hanno un blocksize di 128 MB, si ritroverà con 82.000 mappe, a meno che Configuration.set(MRJobConfig.NUM_MAPS, int) (che prevede solo un accenno al quadro) è usato per impostarlo anche più alto.

Se si desidera modificare il valore predefinito di 1 per numero di riduttori, è possibile impostare sotto proprietà (dalla versione 2.x Hadoop) come parametro di riga di comando

mapreduce.job.riduce

O

è possibile impostare a livello di codice con

job.setNumReduceTasks(integer_numer); 

Dai un'occhiata alla un'altra connessa interrogazione SE: What is Ideal number of reducers on Hadoop?

4

Per impostazione predefinita, il no di riduttori è impostato a 1.

È possibile modificarlo aggiungendo un parametro

mapred.reduce.tasks nella riga di comando o nel codice del driver o nel file conf passato. leggere conf.setNumReduceTasks(int num);

consigliati::

esempio: riga di comando Argomento: bin/hadoop jar ... -Dmapred.reduce.tasks=<num reduce tasks> o, nel codice del driver come https://wiki.apache.org/hadoop/HowManyMapsAndReduces

Problemi correlati