Dobre przykłady map [zamknięte]
Nie mogłem wymyślić żadnych dobrych przykładów innych niż zadanie "jak liczyć słowa w długim tekście za pomocą MapReduce". Stwierdziłem, że nie jest to najlepszy przykład, aby dać innym wrażenie, jak potężne może być to narzędzie.
Nie szukam fragmentów kodu, tylko przykładów "tekstowych".
4 answers
Map reduce to framework, który został opracowany w celu wydajnego przetwarzania ogromnych ilości danych. Na przykład, jeśli mamy 1 milion rekordów w zbiorze danych i jest on przechowywany w reprezentacji relacyjnej - bardzo kosztowne jest wyprowadzanie wartości i wykonywanie na nich jakichkolwiek przekształceń.
Na przykład w SQL, biorąc pod uwagę datę urodzenia, aby dowiedzieć się, ile osób jest w wieku > 30 na milion rekordów zajęłoby chwilę, a to tylko wzrosłoby w kolejności magnitute, gdy złożoność zapytania wzrasta. Map Reduce zapewnia implementację opartą na klastrze, w której dane są przetwarzane w sposób rozproszony
Oto artykuł w Wikipedii wyjaśniający, co map-reduce
jest o
Innym dobrym przykładem jest znalezienie przyjaciół za pomocą Map reduce może być potężnym przykładem do zrozumienia pojęcia i dobrze wykorzystany przypadek użycia.
Osobiście uważam ten link za bardzo przydatny do zrozumienia pojęcia
Http://stevekrenzel.com/finding-friends-with-mapreduce
kopiowanie wyjaśnień podanych na blogu (w przypadku, gdy link nie działa)
Znajdowanie Przyjaciół
MapReduce jest frameworkiem pierwotnie opracowanym w Google, który pozwala do łatwego przetwarzania rozproszonego na dużą skalę w wielu domenach. Apache Hadoop jest implementacją open source.
Podam szczegóły, ale sprowadza się to do definiowanie dwóch funkcje: funkcja mapy i funkcja redukcji. Funkcja mapy pobiera wartość i wyprowadza pary klucz: wartość. Na przykład, jeśli zdefiniujemy funkcja mapy, która pobiera ciąg znaków i wyświetla długość słowa jako klucz i samo słowo jako wartość wtedy map (steve) będzie powrót 5: steve i mapa (savannah) zwrócą 8: savannah. Możesz mieć zauważyliśmy, że funkcja map jest bezpaństwowa i wymaga tylko wejścia wartość do obliczenia wartości wyjściowej. To pozwala nam uruchomić Mapa funkcja przeciw wartościom równolegle i zapewnia ogromną przewagę. Zanim przejdziemy do funkcji reduce, Framework mapreduce grupuje wszystkie wartości razem według klucza, więc jeśli funkcje mapy wyprowadzają następujący klucz: pary wartości:
3 : the 3 : and 3 : you 4 : then 4 : what 4 : when 5 : steve 5 : where 8 : savannah 8 : research
Są grupowane jako:
3 : [the, and, you] 4 : [then, what, when] 5 : [steve, where] 8 : [savannah, research]
Każda z tych linii byłaby następnie przekazywana jako argument do reduce funkcja, która przyjmuje klucz i listę wartości. W tym przypadku, możemy próbować dowiedzieć się jak wiele słów o określonej długości istnieje, więc nasza funkcja redukcji będzie po prostu liczyć liczbę elementów w lista i wypisuje klucz o rozmiarze listy, jak:
3 : 3 4 : 3 5 : 2 8 : 2
Redukcje mogą być również wykonywane równolegle, ponownie zapewniając ogromne przewaga. Możemy wtedy spojrzeć na te ostateczne Wyniki i zobaczyć, że tam były tylko dwa słowa długości 5 w naszym korpusie, itp...
Najczęstszym przykładem mapreduce jest zliczanie liczby razy słowa występują w corpus. Załóżmy, że masz kopię Internetu (Miałem szczęście pracować w takiej sytuacji), a chciałeś listę każdego słowa w Internecie, a także ile razy to się zdarzyło.
Sposób, w jaki podejdziesz do tego, to tokenizacja dokumentów, które mieć (podzielić na słowa), i przekazać każde słowo do mapera. Maper następnie wypluje słowo z powrotem wraz z wartością
1
. Na Faza grupowania zajmie wszystkie klucze (w tym przypadku słowa), oraz dokonać lista 1. faza reduce następnie bierze klucz (słowo) i listę (lista 1 za każdym razem, gdy klucz pojawił się w Internecie), oraz podsumowuje listę. Reduktor następnie wyprowadza słowo, wraz z nim licz. Kiedy wszystko zostanie powiedziane i zrobione, będziesz miał listę każdego słowa na internet, wraz z tym, ile razy się pojawił.Łatwe, prawda? Jeśli kiedykolwiek czytałeś o mapreduce, powyższy scenariusz to nic nowego... to "Hello, World" z mapreduce. Oto prawdziwy przypadek użycia (Facebook może, ale nie musi faktycznie zrobić po, to tylko przykład):
Facebook ma listę znajomych (należy pamiętać, że przyjaciele są dwukierunkowe coś na Facebook ' u. Jeśli jestem twoim przyjacielem, jesteś moim). Mają też dużo miejsca na dysku i obsługują setki milionów zapytań codziennie. Zdecydowali się wstępnie obliczyć obliczenia, kiedy będą mogli skróć czas przetwarzania wniosków. Jedno wspólne żądanie przetwarzania to funkcja "Ty i Joe macie 230 wspólnych przyjaciół". Kiedy ty odwiedź czyjś profil, zobaczysz listę znajomych, których masz w pospolite. Ta lista nie zmienia się często, więc byłoby marnotrawstwo dla Przelicz go ponownie za każdym razem, gdy odwiedzasz profil (na pewno możesz użyć przyzwoita strategia buforowania, ale wtedy nie byłbym w stanie kontynuować pisanie o mapreduce dla tego problemu). Użyjemy mapreduce tak, że możemy obliczyć wszystkich wspólnych przyjaciół raz a dzień i sklep te wyniki. Później to tylko szybkie wyszukiwanie. Mamy mam dużo dysków, jest tani.
Załóżmy, że przyjaciele są przechowywane jako osoba - >[Lista znajomych], nasz lista znajomych to:
A -> B C D B -> A C D E C -> A B D E D -> A B C E E -> B C D
Każda linia będzie argumentem dla mapera. Dla każdego przyjaciela w lista znajomych, maper wyświetli parę klucz-wartość. Klucz będzie bądź przyjacielem wraz z osobą. Wartością będzie lista przyjaciele. Klucz zostanie posortowany tak, aby przyjaciele byli w porządku, powoduje, że wszystkie pary przyjaciół idą do tego samego reduktora. To trudne. aby wyjaśnić tekstem, więc zróbmy to i zobaczmy, czy można zobaczyć wzór. Po uruchomieniu wszystkich maperów będziesz miał listę tak:
For map(A -> B C D) : (A B) -> B C D (A C) -> B C D (A D) -> B C D For map(B -> A C D E) : (Note that A comes before B in the key) (A B) -> A C D E (B C) -> A C D E (B D) -> A C D E (B E) -> A C D E For map(C -> A B D E) : (A C) -> A B D E (B C) -> A B D E (C D) -> A B D E (C E) -> A B D E For map(D -> A B C E) : (A D) -> A B C E (B D) -> A B C E (C D) -> A B C E (D E) -> A B C E And finally for map(E -> B C D): (B E) -> B C D (C E) -> B C D (D E) -> B C D Before we send these key-value pairs to the reducers, we group them by their keys and get: (A B) -> (A C D E) (B C D) (A C) -> (A B D E) (B C D) (A D) -> (A B C E) (B C D) (B C) -> (A B D E) (A C D E) (B D) -> (A B C E) (A C D E) (B E) -> (A C D E) (B C D) (C D) -> (A B C E) (A B D E) (C E) -> (A B D E) (B C D) (D E) -> (A B C E) (B C D)
Każda linia zostanie przekazana jako argument do reduktora. The reduce funkcja po prostu przecina listy wartości i wyprowadza te same klucz z wynikiem przecięcia. Na przykład zmniejsz ((A B) - > (A C D E) (B C D)) wyjdzie (A B) : C D) i oznacza, że przyjaciele A A B mają C i D jako wspólnych przyjaciół.
Wynik po redukcji wynosi:
(A B) -> (C D) (A C) -> (B D) (A D) -> (B C) (B C) -> (A D E) (B D) -> (A C E) (B E) -> (C D) (C D) -> (A B E) (C E) -> (B D) (D E) -> (B C)
Teraz kiedy D odwiedza profil B, możemy szybko poszukać
(B D)
i zobaczyć że mają trzech wspólnych przyjaciół,(A C E)
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-18 14:52:53
Jeden z najlepszych przykładów implementacji MapReduce typu Hadoop .
Należy jednak pamiętać, że są one ograniczone do implementacji opartych na wartości klucza idei MapReduce (więc ograniczają możliwość zastosowania).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-14 18:58:03
Zestaw znanych operacji, które można wykonać w MapReduce, to zestaw normalnych operacji SQL: SELECT, SELECT WHERE, GROUP BY, ect.
Innym dobrym przykładem jest mnożenie macierzy, gdzie mijamy jeden rząd M i cały wektor X i obliczamy jeden element M * x.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-11 18:36:51
Od czasu do czasu przedstawiam ludziom Pana koncepcje. Znajduję zadania przetwarzania znane ludziom, a następnie mapować je do paradygmatu MR.
Zazwyczaj biorę dwie rzeczy:
Grupuj Według Agregacji. Tutaj zaleta etapu tasowania jest wyraźna. Wyjaśnienie, że tasowanie jest również sortowanie rozproszone + Wyjaśnienie algorytmu sortowania rozproszonego również pomaga.
-
Połączenie dwóch stołów. Osoby pracujące z DB znają pojęcie i jego problem ze skalowalnością. Pokaż jak można to zrobić w MR.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-14 18:50:19