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".

 184
Author: approxiblue, 2012-09-11

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).

 261
Author: karthikr,
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).

 22
Author: Nikita Ivanov,
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.

 3
Author: guyrt,
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:

  1. 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.

  2. 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.

 1
Author: David Gruzman,
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