3.1 Historia powstania terminu BigData

Termin Big Data pojawił się stosunkowo niedawno. Google Trends pokazuje początek aktywnego wzrostu użycia frazy od 2011 roku:

Jednocześnie tylko leniwy nie używa teraz tego terminu. Szczególnie często termin ten jest niewłaściwie używany przez marketerów. Czym więc tak naprawdę jest Big Data? Ponieważ postanowiłem usystematyzować i naświetlić problem, konieczne jest zdefiniowanie pojęcia.

W swojej praktyce spotykałem się z różnymi definicjami:

  • Big Data ma miejsce, gdy jest więcej niż 100 GB danych (500 GB, 1 TB, cokolwiek chcesz).
  • Big Data to dane, których nie można przetworzyć w Excelu.
  • Big Data to dane, których nie da się przetworzyć na jednym komputerze.

A nawet te:

  • Big Data to ogólnie dowolne dane.
  • Big Data nie istnieje, zostało wymyślone przez marketerów.

Pozostanę przy definicji z wikipedii:

Big data to szereg podejść, narzędzi i metod przetwarzania ustrukturyzowanych i nieustrukturyzowanych danych o ogromnych wolumenach i znacznej różnorodności w celu uzyskania dostrzegalnych przez człowieka wyników, które są skuteczne w warunkach ciągłego wzrostu, rozproszenia w wielu węzłach sieci komputerowej, utworzonej pod koniec lat 2000. alternatywę dla tradycyjnych systemów zarządzania bazami danych i rozwiązań klasy business intelligence.

Zatem przez Big Data będę rozumieć nie jakąś konkretną ilość danych i nawet nie same dane, ale metody ich przetwarzania, które pozwalają na rozproszone przetwarzanie informacji. Metody te można zastosować zarówno do dużych zbiorów danych (takich jak zawartość wszystkich stron w Internecie), jak i małych zbiorów danych (takich jak treść tego wykładu).

Oto kilka przykładów tego, co może być źródłem danych, które wymaga technik big data:

  • Logi zachowań użytkowników w Internecie
  • Sygnały GPS z samochodów dla firmy transportowej
  • Dane zebrane z czujników w Wielkim Zderzaczu Hadronów
  • Zdigitalizowane książki w Rosyjskiej Bibliotece Państwowej
  • Informacje o transakcjach wszystkich klientów banku
  • Informacje o wszystkich zakupach w dużej sieci handlowej itp.

Liczba źródeł danych szybko rośnie, co oznacza, że ​​technologie przetwarzania danych stają się coraz bardziej poszukiwane.

3.2 Zasady dużych zbiorów danych

Na podstawie definicji Big Data możemy sformułować podstawowe zasady pracy z takimi danymi:

1. Skalowalność pozioma. Ponieważ może istnieć dowolnie duża ilość danych, każdy system, który wymaga przetwarzania dużych danych, musi być rozszerzalny. Objętość danych wzrosła 2-krotnie - ilość żelaza w klastrze wzrosła 2-krotnie i wszystko dalej działało.

2. Tolerancja błędów. Zasada skalowalności poziomej oznacza, że ​​w klastrze może znajdować się wiele maszyn. Na przykład klaster Yahoo Hadoop ma ponad 42 000 maszyn (rozmiary klastrów w różnych organizacjach można zobaczyć pod tym linkiem). Oznacza to, że niektóre z tych maszyn z pewnością ulegną awarii. Praktyki Big Data muszą być świadome tych zakłóceń i przetrwać je bez żadnych znaczących konsekwencji.

3. Lokalizacja danych. W dużych systemach rozproszonych dane są rozproszone na wielu komputerach. Jeżeli dane fizycznie znajdują się na jednym serwerze, a przetwarzane są na innym, koszty transferu danych mogą przewyższyć koszty samego przetwarzania. Dlatego jedną z najważniejszych zasad projektowania rozwiązań BigData jest zasada lokalności danych – w miarę możliwości przetwarzamy dane na tej samej maszynie, na której je przechowujemy.

Wszystkie nowoczesne narzędzia big data są zgodne z tymi trzema zasadami w taki czy inny sposób. Aby podążać za nimi, konieczne jest wypracowanie pewnych metod, metod i paradygmatów tworzenia narzędzi do opracowywania danych. Jedną z najbardziej klasycznych metod przeanalizuję w dzisiejszym wykładzie.

3.3 Zmniejsz mapę

MapReduce to model rozproszonego przetwarzania danych zaproponowany przez Google do przetwarzania dużych ilości danych w klastrach komputerowych. MapReduce dobrze ilustruje poniższy obrazek:

MapReduce zakłada, że ​​dane są zorganizowane w jakieś rekordy. Przetwarzanie danych odbywa się w 3 etapach:

1. Etap mapy . Na tym etapie dane są wstępnie przetwarzane za pomocą zdefiniowanej przez użytkownika funkcji map(). Praca na tym etapie polega na wstępnym przetwarzaniu i filtrowaniu danych. Operacja jest bardzo podobna do operacji na mapie w funkcjonalnych językach programowania – do każdego rekordu wejściowego przypisana jest niestandardowa funkcja.

Funkcja map() zastosowana do pojedynczego rekordu wejściowego tworzy wiele par klucz-wartość. Set — to znaczy, że może zwrócić tylko jeden rekord, może nic nie zwrócić lub może zwrócić kilka par klucz-wartość. To, co będzie w kluczu iw wartości, zależy od użytkownika, ale klucz jest bardzo ważną rzeczą, ponieważ dane z jednym kluczem w przyszłości wpadną do jednej instancji funkcji redukującej.

2. Tasowanie scen. Jest to niezauważalne dla użytkownika. Na tym etapie dane wyjściowe funkcji mapowania są „binned” — każdy bin odpowiada jednemu kluczowi wyjściowemu etapu mapowania. W przyszłości koszyki te będą służyć jako dane wejściowe do redukcji.

3. Redukcja etapu. Każdy „koszyczek” z wartościami wygenerowanymi na etapie losowania trafia na wejście funkcji reduce().

Funkcja reduce jest podawana przez użytkownika i oblicza wynik końcowy dla pojedynczego „koszyka” . Zbiór wszystkich wartości zwracanych przez funkcję reduce() jest końcowym wynikiem zadania MapReduce.

Kilka dodatkowych faktów na temat MapReduce:

  1. Wszystkie uruchomienia funkcji map działają niezależnie i mogą działać równolegle, w tym na różnych komputerach w klastrze.
  2. Wszystkie uruchomienia funkcji redukującej działają niezależnie i mogą działać równolegle, w tym na różnych komputerach w klastrze.
  3. Shuffle wewnętrznie reprezentuje sortowanie równoległe, więc może również działać na różnych komputerach klastrowych. Punkty 1-3 pozwalają na realizację zasady skalowalności poziomej .
  4. Funkcja map jest zwykle używana na tej samej maszynie, na której przechowywane są dane - ogranicza to transmisję danych przez sieć (zasada lokalności danych).
  5. MapReduce to zawsze pełne skanowanie danych, nie ma indeksów. Oznacza to, że MapReduce jest słabo stosowany, gdy wymagana jest bardzo szybka odpowiedź.

3.4 Przykłady zadań skutecznie rozwiązanych za pomocą MapReduce

Liczba słów

Zacznijmy od klasycznego zadania - liczenia słów. Zadanie jest sformułowane w następujący sposób: istnieje duży zbiór dokumentów. Zadanie polega na obliczeniu całkowitej liczby wystąpień danego słowa w korpusie dla każdego słowa, które występuje przynajmniej raz w korpusie.

Rozwiązanie:

Ponieważ mamy duży zbiór dokumentów, niech jeden dokument będzie jednym rekordem wejściowym dla zadania MapRreduce. W MapReduce możemy zdefiniować tylko funkcje zdefiniowane przez użytkownika, które wykonamy (użyjemy pseudokodu podobnego do Pythona):

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

Funkcja map zamienia dokument wejściowy na zestaw par (słowo, 1), tasuj w sposób przejrzysty dla nas zamienia go na pary (słowo, [1,1,1,1,1,1]), zmniejsz sumy tych, zwracając ostateczna odpowiedź na słowo.

Przetwarzanie logów systemu reklamowego

Drugi przykład pochodzi z rzeczywistej praktyki Data-Centric Alliance.

Zadanie: istnieje csv-log systemu reklamowego w postaci:

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

Konieczne jest obliczenie średniego kosztu wyświetlania reklam w miastach Rosji.

Rozwiązanie:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

Funkcja mapy sprawdza, czy ten wpis jest nam potrzebny – a jeśli tak, to pozostawia tylko niezbędne informacje (miasto i kwota płatności). Funkcja zmniejszania oblicza ostateczną odpowiedź dla miasta, biorąc pod uwagę listę wszystkich płatności w tym mieście.