2016-01-10 10 views
6

W Hadoop, jeśli nie ustawiliśmy liczby reduktorów, to ile będzie liczba reduktorów?Domyślna liczba reduktorów

Tak jak liczba elementów mapujących jest zależna od (całkowity rozmiar danych)/(wielkość podziału wejścia), E.g. jeśli rozmiar danych wynosi 1 TB, a rozmiar podziału wejściowego to 100 MB. Wtedy liczba mappers będzie (1000 * 1000)/100 = 10000 (dziesięć tysięcy).

Liczba reduktorów zależy od czynników? Ile reduktorów zostało stworzonych do pracy?

+1

Liczba reduktorów jest domyślnie 1, chyba że ustawisz go do dowolnej liczby niestandardowych że ma sens dla twojej aplikacji, używając 'job.setNumReduceTasks (n);'. Proponuję pominąć istniejące "zasady kciuka". – vefthym

+0

@vefthym czy to nadal prawda? Zapomniałem podać dowolną liczbę i miałem 56 GB danych, a zostało podzielone na 7 plików po 8 GB każdy. Czy istnieje automatyczny powrót rezerwy, jeśli jest zbyt dużo danych dla 1 reduktora? – Thomas

+0

@Thomas Czy odnosisz się do liczby plików wyjściowych, czy liczby podziałów wejściowych? Wartość domyślna 1 jest dla plików wyjściowych (zmniejsz zadania). Wierzę, że to nadal prawda. Jeśli nie ustawiłeś go programowo, możesz również ustawić go jako parametr środowiska wykonawczego. – vefthym

Odpowiedz

8

Ile redukuje? (Z official documentation)

odpowiednią ilość zmniejsza wydaje się 0,95 lub 1,75 pomnożone przez (no. Węzłów) * (nr. Maksymalnych pojemników na węźle).

z 0,95 wszystkie redukcje mogą zostać uruchomione natychmiast i rozpocząć przesyłanie wyników map w momencie zakończenia map, a po 1.75 szybciej węzły zakończą swoją pierwszą rundę zmniejszania i uruchomią drugą falę redukcji, co znacznie ułatwia zadanie równoważenia obciążenia:

Zwiększenie liczby redukcji zwiększa obciążenie ogólne ramy, ale zwiększa równoważenie obciążenia i obniża koszty awarii.

Powyższe współczynniki skalowania są nieco mniejsze niż liczby całkowite, aby zarezerwować kilka zmniejszeń w ramach dla zadań spekulacyjnych i zadań zakończonych niepowodzeniem.

Ten artykuł dotyczy również licznika Mapper.

Ile map?

liczba map jest zwykle napędzany przez całkowitą wielkość nakładów, czyli całkowita liczba bloków z plików wejściowych.

odpowiednim poziomie równoległości dla map wydaje się być około 10-100 mapy per-węzeł, mimo że został ustawiony do 300 map dla bardzo zadań map CPU-light. Konfiguracja zadań zajmuje trochę czasu, więc najlepiej jest, jeśli wykonanie mapy zajmuje co najmniej minutę.

Zatem jeśli oczekujesz 10 TB danych wejściowych i mieć rozmiar bloku 128 MB, będziesz skończyć z 82000 mapach, chyba Configuration.set(MRJobConfig.NUM_MAPS, int) (co stanowi jedynie wskazówkę dla ram) służy do ustawienia go nawet wyżej.

Jeśli chcesz zmienić domyślną wartość 1 dla liczby reduktorów, można ustawić poniżej domu (Hadoop wersji 2.x) jako parametr wiersza poleceń

mapreduce.job.zmniejsza

LUB

można ustawić programowo z

job.setNumReduceTasks(integer_numer); 

Wystarczy popatrzeć na jeden powiązany SE pytanie: What is Ideal number of reducers on Hadoop?

4

Domyślnie nie reduktorów jest ustawiony na 1.

Możesz to zmienić, dodając parametr

mapred.reduce.tasks w linii poleceń lub w kodzie sterownika lub w pliku conf, który przekazujesz.

np: Wiersz poleceń Argument: bin/hadoop jar ... -Dmapred.reduce.tasks=<num reduce tasks> lub w kodzie sterownika jako: conf.setNumReduceTasks(int num);

Zalecane przeczytać: https://wiki.apache.org/hadoop/HowManyMapsAndReduces