2013-04-24 15 views
15

Diversi luoghi indicano che il numero predefinito di riduttori in un lavoro Hadoop è 1. È possibile utilizzare il simbolo mapred.reduce.tasks per impostare manualmente il numero di riduttori.In che modo Hive sceglie il numero di riduttori per un lavoro?

Quando si esegue un lavoro Hive (su Amazon EMR, AMI 2.3.3), ha un numero di riduttori maggiore di uno. Guardando le impostazioni del lavoro, qualcosa ha impostato mapred.reduce.tasks, presumo Hive. Come sceglie quel numero?

Nota: qui ci sono alcuni messaggi durante l'esecuzione di un lavoro alveare che dovrebbe essere un indizio:

... 
Number of reduce tasks not specified. Estimated from input data size: 500 
In order to change the average load for a reducer (in bytes): 
    set hive.exec.reducers.bytes.per.reducer=<number> 
In order to limit the maximum number of reducers: 
    set hive.exec.reducers.max=<number> 
In order to set a constant number of reducers: 
    set mapred.reduce.tasks=<number> 
... 
+0

Buona domanda. Nello specifico, quando sceglie l'hive 'Numero di operazioni ridotte determinate al momento della compilazione' e quando sceglie di fare' stimato dalle dimensioni dei dati di input'? – ihadanny

+0

aggiunto nella risposta sotto –

risposta

16

Il valore di default di 1 forse per una vaniglia Hadoop installazione. Hive lo ignora.

In alveare open source (e probabilmente EMR)

# reducers = (# bytes of input to mappers) 
      /(hive.exec.reducers.bytes.per.reducer) 

This post dice hive.exec.reducers.bytes.per.reducer predefinito è 1G.

È possibile limitare il numero di riduttori prodotti da questa euristica utilizzando hive.exec.reducers.max.

Se si conosce esattamente il numero di riduttori che si desidera, è possibile impostare mapred.reduce.tasks e questo sostituirà tutte le euristiche. (Per impostazione predefinita, questa opzione è impostata su -1, ad indicare che Hive deve utilizzare la sua euristica.)

In alcuni casi, ad esempio 'selezionare il conteggio (1) da T' - Hive imposta il numero di riduttori su 1, indipendentemente dal dimensione dei dati di input. Questi sono chiamati "aggregati completi" e, se l'unica cosa che fa la query sono gli aggregati completi, il compilatore sa che i dati dei mappatori verranno ridotti a un importo insignificante e non è possibile eseguire più riduttori.

+0

Anche se gli aggregati completi riducono l'importo dei dati di output da un valore significativo, Altri riduttori possono aiutare a ridurre il tempo di esecuzione. Siamo di fronte a un problema con Hive che ha oltre 1100 mapper e solo con un riduttore. Ci vogliono ore per finire l'ordinamento. – dedunumax

+0

Il link non è più valido. Buono per postare collegamenti Apache. –

Problemi correlati