2.2.4 Faza redukcji
[14][15] Faza rediiccji rozpoczyna się niezależnie od skończenia fazy mapowania, oznacza to, że węzłom klastra dla każdego skończonego map task, może zostać przydzielony reduce task (podobnie jak map task z tą różnicą, że wykonuje funkcję redukującą), nie czekając aż pozostałe zostaną ukończone. Oczywistą korzyścią z takiego rozwiązania jest wzrost wydajności. Wejściem dla tego etapu są dane wynikowe fazy mapowania. Wartym wspomnienia jest również to, że ta faza jest opcjonalna i może zostać pominięta w zależności od potrzeb aplikacji.
Na proces redukcji składa się::
• wejście, którym jest wynik poprzedniej fazy,
• dla każdego wejścia tworzony jest reduce task i wykonywana jest funkcja redukująca na dostarczonych danych.
• opcjonalnie, gdy pliki są zbyt rozprzestrzenione w skład procesu może wchodzić proces kopiowania plików, aby dostępne były lokalnie i późniejsze sortowanie danych.
• interfejs OutputFormat. który (podobnie jak jego odpowiednik w fazie mapowania. InputFormat) opisuje specyfikację wyjścia • typy danych dla pary kluczawartość,
• wynikiem każdego reduce task jest pik wynikowy zapisywany w systemie plików HDFS. pliki te zostają następnie scalone ze sobą, a dane redukowane po raz ostatni. Uproszczony schemat fazy redukcji można przedstawić w następujący sposób:
(2.10)
< key2,vatue2 > —> reduce ->< key3.mlue,2 >
Fazę redukcji można dodatkowo przyspieszyć oraz zminimalizować obciążenie sieci, poprzez zmniejszenie ilości danych przesyłanych między węzłami dzięki zastosowaniu funkcji łączącej zwanej Combiner function. Funkcja łącząca działa w ten sam sposób co funkcja redukująca, jednak działa ona tuż po wykonaniu fazy mapowania, przed wysłaniem utworzonej struktuy do węzłów wykonujących fazę redukcji.
Podsumowując, algorytm MapReduce jest powszechnie stosowany na dużych zbiorach danych, które w tradycyjny oraz sekwencjonalny sposób przetwarzane byłyby zdecydowanie dłużej. Rozbicie danych na mniejsze fragmenty i dystrybucja na węzły klastra pozwala na równoległe ich przetwarzanie co wiąże się ze znacznym wzrostem wydajności aplikacji opierającej się na tym algorytmie. Przykładem wykorzystania może być analiza dużych ilości tekstu pod kątem zliczania występujących w nim słów. To rozwiązanie najlepiej się sprawdza w takich przypadkach.
18