2014-07-19 7 views
5

So che il numero di mapper può essere impostato in base alla mia dimensione divisa dfs impostando mapred.min.split.size su dfs.block.size.Come impostare il numero del riduttore in modo dinamico in base alla dimensione dell'output del mio mapper?

Analogamente, come è possibile impostare il numero di riduttori in base alla dimensione dell'output del mio mapper?

PS: So che le opzioni seguenti possono essere utilizzate per manipolare il numero del riduttore. mapred.tasktracker.reduce.tasks.maximum mapred.reduce.tasks

risposta

0

Se si desidera impostare il numero di mapper e riduttori attraverso la linea di comando in modo dinamico :: è possibile utilizzare le seguenti opzioni:

-D mapred.map.tasks = 5 -D mapred.reduce.tasks = 5

Possiamo anche impostare il numero di mappatori e riduttori nel codice conducente: job.setNumMapTasks(); job.setNumReduceTasks();

Non penso che sia possibile modificare dinamicamente il numero di riduttori una volta che la mappa ha ridotto il lavoro avviato. Per quanto ne so, non ci sarebbe alcuna interazione umana di fornire valori durante l'esecuzione del lavoro. Dovrebbe essere preconfigurato. Map Reduce job è un processo batch (eseguito a lungo), quindi è difficile per l'utente sapere quando chiederebbe all'utente il numero di riduttori e non è progettato per essere interattivo durante questo processo !! Spero tu abbia avuto la risposta !!

+0

@Merla: Grazie per la risposta. Tuttavia, i suggerimenti non forniscono un'opzione per cambiarli dinamicamente durante l'esecuzione del lavoro in caso di differenza di volume durante l'elaborazione dei dati. – Makubex

+0

Non penso che sia possibile modificare dinamicamente il numero di riduttori una volta che la mappa ha ridotto il lavoro avviato. Per quanto ne so, non ci sarebbe alcuna interazione umana di fornire valori durante l'esecuzione del lavoro. Dovrebbe essere preconfigurato. Map Reduce job è un processo batch (eseguito a lungo), quindi è difficile per l'utente sapere quando chiederebbe all'utente il numero di riduttori e non è progettato per essere interattivo durante questo processo !! Spero tu abbia avuto la risposta !! –

0

Per impostare il numero di compito riduttore in modo dinamico:

Il numero di mappe è solitamente guidato per il numero di blocchi DFS nei file di input. Sebbene ciò induca le persone a modificare le dimensioni del blocco DFS per regolare il numero di mappe.

Quindi, nel codice seguente, impostiamo il numero di attività del riduttore in modo dinamico per adattarlo al numero di attività della mappa in fase di esecuzione.

Nel codice Java:

long defaultBlockSize = 0; 
int NumOfReduce = 10; // you can set anything 
long inputFileLength = 0; 
try { 
    FileSystem fileSystem = FileSystem.get(this.getConf()); // hdfs file 
                  // system 
    inputFileLength = fileSystem.getContentSummary(
      new Path(PROP_HDFS_INPUT_LOCATION)).getLength();// input 
                  // file or 
                  // files 
                  // stored in 
                  // hdfs 

    defaultBlockSize = fileSystem.getDefaultBlockSize(new Path(
      hdfsFilePath.concat("PROP_HDFS_INPUT_LOCATION")));// getting 
                   // default 
                   // block 
                   // size 
    if (inputFileLength > 0 && defaultBlockSize > 0) { 
     NumOfReduce = (int) (((inputFileLength/defaultBlockSize) + 1) * 2);// calculating 
                       // no. 
                       // of 
                       // blocks 
    } 
    System.out.println("NumOfReduce : " + NumOfReduce); 
} catch (Exception e) { 
    LOGGER.error(" Exception{} ", e); 
} 

job.setNumReduceTasks(NumOfReduce); 
+0

non è una risposta per la domanda – dpolaczanski

2

No di riduttori non può impostare dopo la presentazione del lavoro. Pensateci in questo modo: il partizionatore viene richiamato sull'output del mapper e non è necessario conoscere i riduttori per partizionare.

Problemi correlati