2013-04-25 12 views
5

Pracuję nad skonfigurowaniem klastru hadoop, w którym wszystkie węzły są dość heterogeniczne, tj. Każda ma inną liczbę rdzeni. Obecnie muszę ręcznie edytować mapred-site.xml w każdym węźle wypełnić {cores}:Automatycznie ustawić maksymalną liczbę zadań mapowania na węzeł na liczbę rdzeni?

<property> 
    <name>mapred.tasktracker.map.tasks.maximum</name> 
    <value>{cores}</value> 
</property> 

Czy istnieje prostszy sposób na to, kiedy dodać nowe węzły? Większość innych wartości to niektóre wartości domyślne, a maksymalne zadania mapowe to jedyna rzecz, która zmienia się z węzła na węzeł.

Odpowiedz

3

Jeśli jesteś wygodny z niektórych skryptów następnie dodaje daje liczbę „procesorów” dla każdej maszyny (co oznacza różne rzeczy dla różnych architektur, ale jest mniej więcej to, co chcesz):

cat /proc/cpuinfo | grep processor | wc -l 

Następnie można użyć sed lub innego odpowiednika, aby zaktualizować plik mapred-site.xml zgodnie z danymi wyjściowymi tego pliku.

więc oddanie to wszystko razem:

CORES=`cat /proc/cpuinfo | grep processor | wc -l` 
sed -i "s/{cores}/$CORES/g" mapred-site.xml 

przypis, ale prawdopodobnie nie chcesz skonfigurować liczbę mappers oraz liczbę reduktorów każdy z liczbą rdzeni, tym bardziej, że prawdopodobnie chcesz podzielić je między dwa typy i mieć rdzeń zapasowy dla węzła danych i śledzenia zadań itp.

+0

Dzięki. Wiedziałem, że mogę uruchomić jakiś skrypt, żeby to zrobić, ale liczyłem na jakąś zmienną, którą mógłbym wprowadzić. Albo co najmniej rozsądniejsze domyślne niż 2. – job

+0

Można poprawić kod źródłowy TaskTracker, aby zinterpretować formuła w mapred-site.xml (np. '$ CORES/2-1' na przykład) - ale najlepiej też znaleźć metodę Java, aby określić liczbę rdzeni. –

Powiązane problemy