Kiedy rozpoczyna się redukcja zadań w Hadoop?


82

Kiedy w Hadoop zaczynają się zadania redukcji? Czy zaczynają się po osiągnięciu określonego odsetka (progu) twórców map? Jeśli tak, czy ten próg jest ustalony? Jaki rodzaj progu jest zwykle używany?

Odpowiedzi:


206

Faza redukcji składa się z 3 etapów: tasowanie, sortowanie, zmniejszanie. Shuffle to miejsce, w którym dane są zbierane przez reduktor z każdego programu mapującego. Może się to zdarzyć, gdy twórcy map generują dane, ponieważ jest to tylko transfer danych. Z drugiej strony sortowanie i zmniejszanie można rozpocząć dopiero po zakończeniu wszystkich mapowań. Możesz stwierdzić, który MapReduce robi, patrząc na procent ukończenia redukcji: 0-33% oznacza, że ​​wykonuje tasowanie, 34-66% to sortowanie, 67% -100% to redukcja. Dlatego czasami wydaje się, że Twoje reduktory „utknęły” na poziomie 33% - czekają na zakończenie mapowania.

Reduktory zaczynają tasować w oparciu o próg procentowy maperów, którzy skończyli. Możesz zmienić parametr, aby reduktory uruchamiały się wcześniej lub później.

Dlaczego wczesne uruchomienie reduktorów jest dobrą rzeczą? Ponieważ rozkłada transfer danych z maperów do reduktorów w czasie, co jest dobrą rzeczą, jeśli wąskim gardłem jest twoja sieć.

Dlaczego wczesne uruchamianie reduktorów jest złą rzeczą? Ponieważ „zawijają” redukują liczbę miejsc, kopiując tylko dane i czekając na zakończenie mapowania. Inna praca, która zaczyna się później i która faktycznie będzie wykorzystywała pola redukcji, teraz nie może ich używać.

Możesz dostosować czas uruchamiania reduktorów, zmieniając domyślną wartość mapred.reduce.slowstart.completed.mapsw mapred-site.xml. Wartość 1.00will czekać na zakończenie wszystkich maperów przed uruchomieniem redukcji. Wartość od 0.0razu uruchomi reduktory. Wartość 0.5uruchomi redukcje, gdy połowa maperów zostanie ukończona. Możesz także zmieniać mapred.reduce.slowstart.completed.mapsposzczególne zadania. W nowych wersjach Hadoop (przynajmniej 2.4.1) parametr nazywa sięmapreduce.job.reduce.slowstart.completedmaps (dzięki użytkownikowi yegor256).

Zazwyczaj wolę trzymać się mapred.reduce.slowstart.completed.mapspowyżej, 0.9jeśli system ma kiedykolwiek uruchomionych wiele zadań jednocześnie. W ten sposób zadanie nie blokuje reduktorów, gdy nie robią nic poza kopiowaniem danych. Jeśli w danym momencie wykonywana jest tylko jedna praca, 0.1prawdopodobnie byłoby to właściwe.


3
Czy wiesz, gdzie mogę przeczytać więcej o tym, o czym wspomniałeś?
marzyciel

1
Slowstart jest moim zdaniem dość słabo udokumentowany ... podobnie jak większość niejasnych parametrów konfiguracyjnych.
Donald Miner

5
Dobra odpowiedź @Donald Miner. Chcę tylko dodać, że w nowszej wersji Hadoop (używam 1.1.2) wartość jest domyślnie ustawiona na 0,05. hadoop.apache.org/docs/r1.1.2/mapred-default.html
sufinawaz

@Donald Używam wersji 0.20.205.0 hadoop i ustawiam parametr "mapred.reduce.slowstart.completed.maps" w mapred-site.xml na 0.1, ale reduktor nadal działa po zakończeniu mapowania. Mogę wiedzieć, dlaczego?
harry potter

3
@nishm Myślę, że mylisz terminologię całej fazy redukcji w porównaniu z samą redukcją wewnątrz fazy redukcji. Faza redukcji polega na tasowaniu, sortowaniu i zmniejszaniu. Slowstart mówi mu, kiedy rozpocząć ogólną fazę. Masz rację, że redukcja wewnątrz fazy redukcji zaczyna się dopiero po zakończeniu mapowania.
Donald Miner

5

Faza redukcji może rozpocząć się na długo przed wywołaniem reduktora. Jak tylko "mapper" zakończy zadanie, wygenerowane dane są sortowane i tasowane (co obejmuje wywołanie sumatora i partycjonera). „Faza” reduktora uruchamia się w momencie rozpoczęcia przetwarzania danych po mapowaniu. Po zakończeniu przetwarzania zobaczysz postęp w procentach redukcji. Jednak żaden z reduktorów nie został jeszcze wezwany. W zależności od liczby dostępnych / używanych procesorów, charakteru danych i liczby oczekiwanych reduktorów, możesz chcieć zmienić parametr zgodnie z opisem @ Donald-miner powyżej.


1

O ile rozumiem, faza redukcji zaczyna się od fazy mapy i nadal zużywa rekord z map. Jednak ponieważ po fazie mapowania występuje faza sortowania i tasowania, wszystkie wyjścia muszą zostać posortowane i wysłane do reduktora. Więc logicznie można sobie wyobrazić, że faza redukcji zaczyna się dopiero po fazie mapy, ale w rzeczywistości ze względu na wydajność reduktory są również inicjowane z mapowaniem.


0

Procent pokazany dla fazy redukcji jest w rzeczywistości ilością danych skopiowanych z map wyjściowych do katalogów wejściowych reduktorów. Aby wiedzieć, kiedy zaczyna się to kopiowanie? Jest to konfiguracja, którą możesz ustawić, jak pokazał Donald powyżej. Gdy wszystkie dane zostaną skopiowane do reduktorów (tj. 100% redukcji), wtedy reduktory zaczną działać i może się zawiesić w „100% redukcji”, jeśli twój kod reduktorów jest obciążony we / wy lub procesor.


0

Reduce rozpoczyna się dopiero po tym, jak wszystkie mapper wykonał tam zadanie, Reducer musi komunikować się ze wszystkimi mapperami, więc musi poczekać, aż ostatni mapper zakończy swoje zadanie. Jednakże mapper rozpoczyna przesyłanie danych do momentu zakończenia zadania.


-1

Rozważmy przykład WordCount, aby lepiej zrozumieć, jak działa zadanie redukcji mapy. Załóżmy, że mamy duży plik, powiedzmy, a naszym zadaniem jest znaleźć, ile razy każde słowo występuje w pliku. Ponieważ plik jest duży, można go podzielić na różne bloki i replikować w różnych węzłach roboczych. Zadanie zliczania słów składa się z map i zadań redukcji. Zadanie mapy przyjmuje jako dane wejściowe każdy blok i tworzy pośrednią parę klucz-wartość. W tym przykładzie, ponieważ liczymy liczbę wystąpień słów, mapper podczas przetwarzania bloku dałby pośrednie wyniki postaci (słowo1, liczba1), (słowo2, liczba2) itd. Wyniki pośrednie wszystkich maperów to przeszedł przez fazę tasowania, która zmieni kolejność wyniku pośredniego.

Załóżmy, że nasze dane wyjściowe map z różnych maperów mają następującą postać:

Mapa 1: - (jest, 24) (była, 32) (i, 12)

Mapa2: - (mój, 12) (jest, 23) (był, 30)

Dane wyjściowe mapy są sortowane w taki sposób, że te same wartości kluczy są przekazywane do tego samego reduktora. Tutaj oznaczałoby to, że klawisze odpowiadające is, was etc idą do tego samego reduktora. To reduktor produkuje końcowe wyjście, które w tym przypadku byłoby: - ​​(i, 12) (is, 47) (my, 12 ) (była, 62)


Nie dotyczy pytania OP, KIEDY reduktor się uruchamia.
Sai Kiriti Badam

-1

Zadania reduktora rozpoczynają się dopiero po zakończeniu completionwszystkich maperów.

Ale transfer danych odbywa się po eachMap. W rzeczywistości jest to operacja ciągnięcia.

Oznacza to, że za każdym razem reduktor zapyta każde zadanie mapy, czy ma jakieś dane do pobrania z mapy.Jeśli znajdzie któryś z maperów wykonał swoje zadanie, Reducer pobierze dane pośrednie.

Dane pośrednie z Mappera są przechowywane w disk. Transfer danych z Mappera do Reduce odbywa się przez sieć ( Data Localitynie jest zachowywany w fazie Reduce)


-2

Kiedy Mapper zakończy swoje zadanie, Reducer rozpoczyna zadanie redukcji danych, to jest zadanie Mapreduce.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.