2014-07-19 31 views
5

Wiem, że liczba programów odwzorowujących można ustawić na podstawie rozmiaru podzielonego pliku dfs, ustawiając mapred.min.split.size na dfs.block.size.Jak ustawić liczbę reduktorów w sposób dynamiczny w zależności od mojego rozmiaru wyjściowego mapera?

Podobieństwo w jaki sposób ustawić I liczbę reduktorów na podstawie mojego rozmiaru wyjściowego mapera?

PS: Wiem, że poniższe opcje mogą być używane do manipulowania liczbą reduktora. mapred.tasktracker.reduce.tasks.maximum mapred.reduce.tasks

Odpowiedz

0

Jeśli chcesz ustawić liczbę mappers i reduktorów poprzez linię poleceń dynamicznie :: można użyć poniższych opcji:

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

można też ustawić liczbę elementów odwzorowujących i reduktorów w kodzie kierowcy: job.setNumMapTasks(); job.setNumReduceTasks();

Nie sądzę, że można dynamicznie zmieniać liczbę reduktorów po rozpoczęciu zadania zmniejszania mapy. O ile mi wiadomo, nie byłoby żadnych ludzkich interakcji dostarczania wartości podczas wykonywania zadania. Powinno to być wstępnie skonfigurowane. Mapa Zredukuj zlecenie to proces wsadowy (działa długo), więc trudno jest zorientować się, kiedy użytkownik poprosi o liczbę reduktorów i nie jest zaprojektowany, aby był interaktywny podczas tego procesu! Mam nadzieję, że masz odpowiedź !!

+0

@Merla: Dzięki za odpowiedź. Ale nadal sugestie nie dają opcji, aby zmienić je dynamicznie podczas pracy w przypadku różnicy w objętości podczas przetwarzania danych. – Makubex

+0

Nie sądzę, że możesz dynamicznie zmieniać liczbę reduktorów po rozpoczęciu zadania zmniejszania mapy. O ile mi wiadomo, nie byłoby żadnych ludzkich interakcji dostarczania wartości podczas wykonywania zadania. Powinno to być wstępnie skonfigurowane. Mapa Zredukuj zlecenie to proces wsadowy (działa długo), więc trudno jest zorientować się, kiedy użytkownik poprosi o liczbę reduktorów i nie jest zaprojektowany, aby był interaktywny podczas tego procesu! Mam nadzieję, że masz odpowiedź !! –

0

Aby ustawić liczbę zadania reduktora dynamicznie:

liczba map jest zwykle napędzany przez liczbę bloków DFS w plikach wejściowych. Chociaż to powoduje, że ludzie dostosowują swój rozmiar bloku DFS, aby dostosować liczbę map.

W poniższym kodzie ustawiajmy liczbę zadań reduktora dynamicznie, aby dostosować je do liczby zadań map w czasie wykonywania.

W kodzie 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

to nie jest odpowiedź na pytanie – dpolaczanski

2

Nie reduktorów nie można ustawić po przedłożeniu pracy. Pomyśl o tym w ten sposób - program partycjonujący jest wywoływany na wyjściu programu mapującego i musi znać liczbę reduktorów na partycje.

Powiązane problemy