1 / 59

Nowe abstrakcje programowania rozproszonego

Nowe abstrakcje programowania rozproszonego. Wykład: Map Reduce Laboratoria: Hadoop. Aftowicz Jakub Ciesielczyk Tomasz. Problemy. Big Data. B i g D a t a. MapReduce. M a p R e d u c e. Aftowicz Jakub Ciesielczyk Tomasz. Motywacje.

Download Presentation

Nowe abstrakcje programowania rozproszonego

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nowe abstrakcje programowania rozproszonego Wykład: Map Reduce Laboratoria: Hadoop Aftowicz JakubCiesielczyk Tomasz

  2. Problemy Big Data BigData

  3. MapReduce MapReduce Aftowicz JakubCiesielczyk Tomasz

  4. Motywacje • Page Rank – mnożenie dużych macierzy przez wektor • Przeglądanie i przeszukiwanie sieci społecznościowych (facebook – ponad miliard użytkowników). Grafy z miliardem węzłów oraz miliardami (bilionami) krawędzi. • Analiza zawartości pobranych stron • Tworzenie indeksów odwrotnych

  5. Przykład wordcount Ala ma kota. Ala ma psa. Pies ma Alę.

  6. Word count – jedna maszyna HashMap<String,Integer> wordCount = newHashMap<>();

  7. Word count – jedna maszyna HashMap<String,Integer> wordCount = newHashMap<>(); for (Documentdocument : documentSet){ String[] T = tokenize ( document ) ; }

  8. Word count – jedna maszyna HashMap<String,Integer> wordCount = newHashMap<>(); for (Documentdocument : documentSet){ String[] T = tokenize ( document ) ; for(Stringtoken: T){ if (!wordCount.containsKey(token)){ wordCount.put(token,1); } else{ wordCount.put(token, wordCount.get(token)+1); } } }

  9. Word count – wiele maszyn HashMap<String,Integer> wordCount = newHashMap<>(); for (Documentdocument: documentSubSet){ String[] T = tokenize ( document ) ; for(Stringtoken: T){ if (!wordCount.containsKey(token)){ wordCount.put(token,1); } else{ wordCount.put(token, wordCount.get(token)+1); } } } sendSecondStep(wordCount);

  10. Word count – wiele maszyn Second step: HashMap<String,Integer> globalWordCount; for ( HashMap<String,Integer> wordCount : receivedWordCount) { add(globalWordCount , wordCount); }

  11. Word count – wiele maszyn Aby procedura mogła zadziałać na grupie maszyn, musimy spełnić następujące funkcjonalności: • Składowanie plików (fragmentów danych) na dyskach maszyn (documentSubSet) • Zapisywanie dane do tabeli hashowych opartych o dyski twarde tak by nie być ograniczonym pamięcią RAM • Podzielenie danych pośrednich (wordCount) z kroku pierwszego. • Rozdysponowanie fragmentów danych do odpowiednich maszyn • Sprawdzanie poprawności

  12. Word count – wiele maszyn • Co się stanie w przypadku awarii jednej ze stacji roboczych? • Co się stanie w przypadku awarii zarządcy? • Co się stanie w przypadku natrafienia na wadliwe dane? • Jak należy rozproszyć dane? • W jaki sposób zebrać wyniki?

  13. MapReduce - Założenia • Automatyczna dystrybucja danych programista tylko definiuje w jaki sposób odczytywać dane (np. podziel wiersz w pliku po średniku) • Automatyczne zrównoleglenie zadań programista tylko pisze co chce zrobić (reducer) • Automatyczne zarządzanie zadaniami zrównoleglenie wątków jest transparentne dla programisty

  14. MapReduce - Założenia • Odporność - implementacja powinna być niewrażliwa na awarię maszyn • Automatyczna komunikacja • „Loadbalancing” • Skalowalność – skalowalny liniowo poprzez dodawanie kolejnych maszyn • Dostępność – użycie na grupie normalnych maszyn (PC), chmura obliczeniowa typu Amazon, Beyond

  15. MapReduce - Idea • Map Generowanie pary klucz-wartość • Reduce Łączy wartości związane z wcześniej wygenerowanymi kluczami „Dziel i zwyciężaj”

  16. MapReduce - Idea

  17. Word count – MapReduce public map( Stringfilename , Stringdocument ) { List<String> T = tokenize ( document ) ; for(Stringtoken: T){ emit(token , 1) ; } }

  18. Word count – MapReduce public reduce ( Stringtoken , List<Integer>values ) { Integer sum = 0; for(Integervalue:values) { sum = sum + value ; } emit (token , sum) ; }

  19. Mnożenie macierzyprzezwektor • Zdefiniujmy macierz M o rozmiarze n x n o elementach mijoraz wektor V o długości n o elementach vj • Wynikiem iloczynu M*V jest wektor X o długości no elementach zdefiniowano: • Macierz M jest przechowywana za pomocą trójki liczb (i, j,mij)

  20. Mnożenie macierzyprzezwektor • Załóżmy, że n jest duże, ale nie na tyle, żeby wektor nie zmieścił się w pamięci i jest dostępny w każdym Mapperze

  21. Mnożenie macierzyprzezwektor • Map: • Przechowuje cały wektor v i fragment macierzy M. • Z każdego elementu mij produkuje parę klucz-wartość <i, mij*vj>component • Reduce • Sumowanie wszystkich wartości dla danego klucza i (komórka wektora x). Wyjście : <i,xi>

  22. Mnożenie macierzyprzezwektor • Załóżmy, że n jest na tyle duże że wektor nie zmieścił się w pamięci Mappera i musi nastąpić jego podział • Podzielmy zatem macierz na pionowe fragmenty o jednakowej szerokości, a następnie wektor na jednakową ilość poziomych fragmentów • i-ty fragment macierzy będzie mnożony jedyni z elementami z i-tego fragmentu wektora

  23. Mnożenie macierzyprzezwektor

  24. Mnożenie macierzyprzezwektor • Map: • Przechowuje fragment wektora v i macierzy M. • Z każdego elementu mij produkuje parę klucz-wartość <i, mij*vj>component • Reduce • Sumowanie wszystkich wartości dla danego klucza i (komórka wektora x). Wyjście : <i,xi>

  25. Korzyści… • Umożliwia programistom bez doświadczenia z dziedziny systemów równoległych i rozproszonych, korzystanie z zasobów dużego systemu rozproszonego • Ukrywa „niechlujne” szczegółyzrównoleglenia, obsługi błędów, rozproszenie danychi równoważenie obciążenia w bibliotece.

  26. Awaria workera • Master periodycznie pinguje każdego workera • Master oznacza wadliwego workera • Wszystkie zadania Mapowania zlecone do tej pory danemu workerowi przywracane są do stanu Idle • Wyniki przechowywane są lokalnie na maszynie która uległa awarii • Ukończone zadania typu Reduce nie muszą być powtarzane • Wyniki zadań Reduce przechowywane są w GFS

  27. Awaria workera • Kiedy zadanie Map zostaje przeniesione z workera A do B wszyscy workerzy wykonujący zadania typu Reduce zostają powiadomieni o zmianie • Powtórne wykonanie podstawowym mechanizmem obsługi błędów • MapReduce jest odporne na awarie wielu stacji roboczych naraz, przenosząc obliczenia na działające maszyny i kontynuąjąc przetwarzanie

  28. Awaria Mastera • Master może wykonywać Checkpointy • Po awarii nowa kopia Mastera może wystartować z ostatniego Checkpointu • Jednak przy posiadaniu tylko jednego Mastera sznasa jego awarii jest niewielka… • … dlatego implementacje przerywają przetwarzanie w przypadku awarii mastera

  29. Ciekawostki i zalecenia • Problem „Maruderów” • Wykonania „Pojedynczych” zadań się przeciągają • Backup Tasks • Do 44% wzrost czasu wykonania • Problem „Złych Rekordów” • Błędy w kodzie użytkownika powodujące awarie w wyniku przetwarzania pewnych danych • Błędy w zewnętrznych bibliotekach • Czasami dopuszczalne jest pominięcie niektórych rekordów

  30. Ciekawostki i zalecenia • Partycjonowanie • Domyślne • (hash(key) mod R) • Użytkownika • Np. grupowanie po URL (hash(Hostname(urlkey)) modR) • Zasoby na jednym serwerze odpytywane przez jednego workera • korzystamy z usprawnień protokołu HTTP i HTTPS • Sortowanie (TeraSort)

  31. Ciekawostki i zalecenia • Combiner • Kierowanie danych w paczkach do Reducerów • Z reguły powiela kod Reducera • Potrafi znacząco przyspieszyć rozwiązywani niektórych problemów MapReduce • Np. wordcount • wiele <the, 1> zagregowane do <the, k> • Oszczędność przy wysyłaniu przez sieć

  32. MapReduce: koszt i problemy • Wąskim gardłem dla MapReduce jest komunikacja danych po sieci • Ilość zadań powinna być dużo większa od ilości workerów

  33. MapReduce koszt i problemy • Dla maksymalnego zrównoleglenia mappery i reducery powinny być stateless, nie powinny zależeć od żadnych danych w obrębie zadania MapReduce. Nie jest możliwym sterowania porządkiem wykonywania zadań map i reduce. • Faza reduce nie jest wykonywana przed zakończeniem fazy map • Zakłada się, że wynik reducera jest mniejszy od wejścia mappera

  34. MapReduce: koszt i problemy Czy MapReduce/Hadoop rozwiąże moje problemy? • tak, jeśli umiesz przekształcić algorytm do postać Map-Reduce • „It is not a silver bullet to all the problems of scale, just a good technique to work on large sets of data when you can work on small pieces of that dataset in parallel „

  35. SQL a MapReduce • R,S – relacje (tabele) • t, t’ : krotki • s – warunek selekcji • A, B, C – podzbiór atrybutów • a, b, c – wartości atrybutów dla danego podzbioru atrybutów

  36. Selekcja • MapDla każdej krotki t w R sprawdź czy spełnia warunek selekcji s. Jeśli spełnia to produkuj parę klucz wartość: (t, t) • Reduce Po prostu przekazuje dane na wyjście

  37. Projekcja • MapDla każdej krotki t w R wyprodukuj krotkę t’ poprzez wyeliminowanie atrybutów spoza zbioru A. Wyjście (t,t’) • ReduceDla każdego klucza może być wiele krotek t’. Wejście (t’,[t’,…t’]). Wyjście: dla każdej krotki t’ wyprodukuj (t’,t’)

  38. Suma (Union) • Map wyjście: (t’,t’) dla każdej z relacji S i R • Reduce Dla każdego klucza t wyprodukuj (t,t)

  39. Różnica • MapDla krotki t z relacji R wyprodukuj (t, name(R)). Dla krotki t z relacji S: (t, name(S)) • Reduce Dla każdego klucza t : -jeśli lista wartości zawiera tylko name(R) to wyporodukuj (t, t) -jeśli lista wartości zawiera: [name(R), name(S)] lub [name(s)] lub [name(S), name(R)] nie produkuj nic

  40. Przecięcie • Map: dla każdej R lub S wyprodukuj (t, t) • Reduce Jeżeli klucz t ma parę wartości to wyprodukuj (t, t). W Przeciwnym wypadku nie produkuj nic

  41. Natural Join • Map dla każdej krotki (a, b) z R wyprodukuj (b,[name(R),a]). Dla każdej krotki (b, c) z S wyprodukuj (b,[name(S),c]) • Reduce klucz b zawiązany jest z wartościami: [name(R),a] i [name(S),c]. Wygeneruj wszystkie możliwe pary: (b,a1,c1), (b,a2,c1), … , (b,an,cn).

  42. Grupowanie i Agregacja • MapDana relacja R (A,B,C). Aby pogrupować ją po atrybucie A i zagregować po atrybucie B wyprodukuj parę (a,b) • Reducewejście: (a,[b1,b2 …]). Dla listy wartości przeprowadź funkcje agregacji, np. suma. Wyprodukuj parę (a, x) gdzie x to suma wszystkich wartości dla klucza a

  43. Hadoop Aftowicz JakubCiesielczyk Tomasz

  44. Hadoop • Implementacja OpenSourceMapReduce • Pracuje w architekturze master/slave dla rozproszonych danych oraz rozproszonych obliczeń • Uruchomienie Hadoopa wiąże się z uruchomieniem szeregiem różnych usług na serwerach dostępnych w sieci: NameNode, DataNode, SecondaryNameNode, JobTracker, TaskTracker

  45. Hadoop

  46. Hadoop - NameNode • Zarządza Hadoop File System(HDFS), kieruje niskopoziomowymi operacjami we/wyj na DataNode • Śledzi podział danych (plików) na bloki, wie gdzie te bloki się znajdują • NameNodezazwyczaj nie przechowuje żadnych danych oraz nie robi żadnych obliczeń dla procesu MapReduce • W przypadku awarii NameNode HDFS nie działa. Można opcjonalnie użyć SecondaryNameNode

  47. Hadoop – SecondaryNameNode • Odpowiada za monitorowanie stanu HDFS • Każda grupa komputerów/klaster? (cluster) ma jeden SecondaryNameNode, który znajduje się na osobnej maszynie • Różni się od NameNode tym że nie dostaje ani nie rejestruje żadnych danych w czasie rzeczywistym od HDFS. W zamian za to komunikuje się z NameNode, żeby zapisać stan HDFS (snapshot). Częstotliwość zapisu jest determinowana przez ustawienia klastra.

More Related