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);
fonte
2015-02-28 11:22:27
@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
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 !! –