Przykład MapReduce Python

Przykład MapReduce Python
Wiele razy, w przypadku danych, napotykamy dużą liczbę danych. Istnieje wiele metodologii do obsługi tego przypadku. Ale wiele podejść nie jest w stanie poradzić sobie z sytuacją. Używamy więc map-redukcji w takich sytuacjach. „MapReduce” to framework i model programowania w architekturze Hadoop, wykorzystywany do przetwarzania dużej ilości danych w systemach plików Hadoop.

„MapReduce” jest jednym z trzecich elementów Hadoop. Ramy te są wydajne do przetwarzania dużych danych równolegle z innymi zadaniami. Podstawowym celem „MapReduce” jest mapowanie każdego zadania zbiorowo w grupach, a następnie zmniejszy to do równych zadań w celu zmniejszenia tworzenia klastrów procesów. Zadanie „MapReduce” jest podzielone na dwie fazy.

  • Faza mapy
  • Zmniejszyć fazę

Mapa zmniejsz koncepcję i architekturę

Dane wejściowe są dystrybuowane na małe fragmenty w celu przetwarzania danych przez różnych pracowników. Każda mała część jest odwzorowana na sytuację pośredniego/stan. Że dane pośrednie są następnie gromadzone razem, a następnie następuje proces podziału, który jest oparty na wartości kluczowej, aby zachować ze sobą wszystkie powiązane materiały. Następnie ten partycjonowanie danych prowadzi do uzyskanego zmniejszonego zestawu. Rozważmy poniższy schemat.

Części architektury

  • Klient: To ten, który jest odpowiedzialny za podjęcie zadania „MapReduce” dla funkcji przetwarzania. Może istnieć możliwość wielu klientów, którzy wysyłają zadania w sposób ciągły do ​​przetwarzania do menedżera „MapReduce”.
  • Stanowisko: To rzeczywiste zadanie/praca, którą klient chce zrobić, zawiera wiele mniejszych zadań, których klient chce do wykonania.
  • Hadoop MapReduce Master: Funkcją tego mistrza jest podzielenie zadania na mniejsze części pracy.
  • Części pracy: Pod-dokumenty uzyskane z głównej funkcji zadania. Wynikająca wartość wszystkich części pracy wspólnie tworzy ostateczne wyjście.
  • Dane wejściowe: Dane wprowadzone do mapy-reduce do przetwarzania danych.
  • Dane wyjściowe: W rezultacie zawiera ograniczone słowa.

Części pracy uzyskane z pracy są następnie przenoszone na mapę i zmniejszają zadania. Te dwa zadania mają programy i algorytmy, które zależą od wymagań użytkownika. Dane wejściowe są używane i wprowadzane do zadania mapy. Zadanie mapy wygeneruje następnie parę wartości pośredniej, która będzie działać jako dane wejściowe dla fazy zmniejszenia. W fazie redukcji, po przeprowadzeniu procesu redukcji, przechowuj ostateczne wyniki w HDFS. Teraz przechodząc w kierunku przykładu Reduce Map, kod w przykładzie jest wyjaśniany zarówno fazami osobno, jak i ich wyjściami.

Kod Pythona MapReduce

Hadoop Streaming API służy do przekazywania danych między mapą i zmniejszenia kodu przez stdin i mocno. Aby odczytać dane wejściowe i wydrukować wyjście: „Sys.Stdin ”jest używany. Inne procedury są obsługiwane przez samop strumieniowe Hadoop.

Faza mapy

Głównym zastosowaniem fazy mapy jest mapowanie danych wejściowych w postaci par klawiszów. Wartość kluczowa, której używaliśmy, może działać jako identyfikator, jest pewien adres, a wartość zawiera rzeczywistą wartość, która jest utrzymywana. Ta faza mapy wygeneruje wartość pośrednią z kluczem jako wyjście. Aby zmniejszyć funkcję, wyjście mapy jest używane jako wejście. Rozważmy kod funkcji mapy. Ta funkcja jest również znana jako maper.py.

Powinieneś utworzyć plik i zapisać kod w tym pliku. I.E/HOME/AQSA/MAPPER.py. Skrypt mapy nie jest w stanie obliczyć wartości pośredniej wszystkich słów, która występuje kilka razy. Zamiast tego da części danych, nawet słowa powtarzają wielokrotności czasów w danych wejściowych. Pozwolimy, aby funkcja zmniejszyła liczbę słów, obliczając sumę ich wystąpienia. Jedna rzecz, o której należy pamiętać, plik ma uprawnienia do wykonania (CHMOD+X/HOME/AQSA/MAPPER.py). Przechodząc do kodu, pierwszym krokiem będzie import modułu SYS. Wejście zostanie pobrane za pomocą pętli For przez stdin.

Dla linii w sys.stdin:

Ta funkcja następnie odczytuje wiersz według linii, rozebrał wszystkie wiersze i usunie białe linie między nimi przez funkcję paska. Podobnie każda linia jest podzielona na słowa za pomocą funkcji podzielonej. Obie funkcje są zadeklarowane wewnątrz ciała dla pętli.

# linia = linia.rozebrać się()
# słowa = wiersz.podział() #!/usr/bin/env python
„” „Mapper.py "" "
Import Sys
# Wejście pochodzi ze stdin (standardowe wejście)
dla linii w sys.stdin:
# Usuń wiodącą i spacerową Białytą
linia = linia.rozebrać się()
# Podziel linię na słowa
słowa = linia.podział()
# Zwiększ liczniki
Dla słów w słowach:
# Napisz wyniki do stdout (standardowe wyjście);
# tabelimited; trywialna liczba słów wynosi 1
Drukuj ('%s \ t%s'%(słowo, 1))

Po wykonaniu wszystkich funkcji każde słowo zostanie wydrukowane jeden po drugim.

Wartości pośrednich ulegają dwóch procesach przed wejściem w fazę redukcji. Te dwa etapy to tasowanie i faza sortowania.

Faza tasowania:

Celem tej funkcji jest powiązanie wszystkich wartości podobnego klucza. Na przykład rozważ słowo (tak, 1), które miało miejsce 4 razy w pliku wyjściowym. Więc po tej fazie wyjście zostanie pokazane jako (tak, [1,1,1,1]).

Faza sortowania:

Po zakończeniu procesu przetasowania wartości wyjściowe są wysyłane do fazy sortowania. W tej fazie wszystkie klucze i wartości są sortowane automatycznie. W Hadoop proces sortowania nie wymaga żadnego algorytmu sortowania, ponieważ jest to proces automatyczny. To z powodu wbudowanego interfejsu o nazwie „WriTableComparableInteface”.

Zmniejszyć fazę

Wartości pośrednie są następnie przenoszone do funkcji zmniejszania po ich sortowaniu. Zmniejsz grupę funkcji Dane w zależności od pary wartości kluczowej zgodnie z algorytmem reduktora używanego przez programistę.

Kod, który zaimplementujemy, jest zapisywany w pliku ścieżki „/home/aqsa/reducer.py ”. Ten plik odczytuje wyniki z „maper.plik py ”ze stdin. W tym celu format „maper.plik py ”i dane wejściowe pochodzące z mapera.PY powinien być taki sam. Następnie ta funkcja przyjmuje sumę wystąpienia każdego słowa, a ostateczne wyjście jest wyświetlane przez stdout.

#!/usr/bin/env python
"""reduktor.py "" "
Import Sys
current_word = brak
current_count = 0
Word = brak
dla linii w sys.stdin:
linia = linia.rozebrać się()
# Przejdź wejście, które otrzymaliśmy z Mappera.py
Word, count = linia.split („\ t”, 1)
próbować:
count = int (Count)
Z wyjątkiem ValueerRor:
Kontynuować
Jeśli Current_Word == Word:
current_count += liczba
w przeciwnym razie:
Jeśli Current_Word:
# Napisz wynik do stdout
print ('%s \ t%s'%(current_word, current_count))
current_count = Count
current_word = Word
Jeśli Current_Word == Word:
print ('%s \ t%s'%(current_word, current_count))

Moduł SYS jest importowany najpierw. Wówczas zmienna dla procesu zliczania jest deklarowana 0 jako wartość początkowa. Wzięliśmy wartości wejściowe za pomocą pętli, a linie są oddzielone, podobnie jak funkcja mapy. Aby podzielić słowa, używamy zarówno słów, jak i zliczamy zmienne.

# Count, Word = linia.split („\ t”, 1)

W ciele Try, zmienną liczby przypisuje się wartość. Stalowanie IF służy do sprawdzenia, czy nadchodzące słowo jest takie samo jak przechowywane; Zmienna liczby jest zwiększana.

# Current_count += liczba

Wynikowa wartość

Aby sprawdzić wyniki, przejdź do terminala Linuksa. Tutaj użyjemy ciągu, który łączy pojedyncze i powtarzalne słowa, aby uzyskać wszechstronne wyniki.

$ echo „mapa i redukuj to skuteczna i wydajna funkcja, tworz mapę Zmniejsz framework” | /home/aqsa/maper.Py | sort -k1,1 | /home/aqsa/reduktor.py

Wniosek

„MapReduce Python Przykład” składa się z podstawowej funkcjonalności i architektury Map-Reduce zbiorowo i osobno. Formacja wartości pośredniej odgrywa ważną rolę w tym celu. Aby uzyskać ograniczoną wartość, ilekroć chcesz zarządzać dużymi zbiorami danych, musisz użyć funkcji „MapReduce” w programie. Czytanie tego artykułu będzie źródłem pełnych informacji dotyczących funkcji „MapReduce”.