Big Data – gwałtownie rośnie ilość gromadzonych danych

W ciągu ostatnich dwóch lat ilość danych gromadzonych na serwerach firm działających w internecie wzrosła o 90 %. Zapisano ich w tym czasie więcej niż wszystko co ludzkość zapisała od zejścia z drzewa. Do 2020 roku co sekundę będzie się produkować 1.7 MB danych na każdego człowieka na Ziemi i osiągnie wartość 44 ZB (zetta bajtów ) Użytkownicy w samej tylko wyszukiwarce Google zadają 40 000 zapytań w ciągu sekundy, co daje 1,2 biliona zapytań rocznie. Od sierpnia br. ponad miliard ludzi używa Facebooka codziennie zostawiając około 31 milionów wiadomości i prawie 3 miliony filmów na minutę. Na YouTube przybywa około 300 godzin materiałów filmowych na minutę. W tym roku około miliarda zdjęć użytkownicy zostawią w chmurach.

Większą ilość tych danych produkują telefony komórkowe. Tymczasem przewiduje się, że w tym roku zostanie sprzedanych 1,7 miliarda nowych telefonów, a do roku 2020 będzie już działać ich ponad 6 miliarda. Ale to wszystko może okazać się niczym w porównaniu do przewidywanych 50 miliardów urządzeń Internetu Rzeczy. A przy tym coraz więcej danych jakie tworzymy na różnych urządzeniach przechodzi przez chmury i w prognozowanym 2020 roku trzecia ich część będzie tam trafiać.

Big Data jest dla wielu firm źródłem wzrostu dochodów. Ocenia się, że około 73% dużych kompani w USA planuje rozwój w tej dziedzinie. W największych firmach wzrost o 10% ilości danych skutkuje wzrostem dochodów rzędu 65 milionów, a w firmach handlowych pełne wykorzystanie gromadzenia i przetwarzania danych może dać przyrosty przychodów rzędu 60%. Sam Biały Dom ostatnio zainwestował 200 mln dolarów w projekty związane z Big Data. A analiza wydatków na system opieki zdrowotnej wskazuje, że poprawienie ilości i jakości przetwarzania danych medycznych może dać oszczędności roczne na poziomie 1000 dolarów na jednego pacjenta.

Wszystkie te informacje dotyczą tylko tych danych, którymi firmy chwalą się oficjalnie. A ile jeszcze danych jest gromadzonych w sposób mniej jawny. Jaką masę danych o użytkownikach gromadzi Google, Microsoft i inne firmy IT, nie wspominając już o NSA.

Problemy gromadzenia i przetwarzania danych

Najciekawszy w tym wszystkim jest fakt, że obecnie tylko niecałe 0,5% tych danych jest odpowiednio przetwarzane i wykorzystywane. Wygląda na to, że firmy gromadzą je na zapas i nie są w stanie ogarnąć całości i zrobić z nich użytek. Oczywiście powód jest jasny, danych jest bardzo dużo, trudno je już przechowywać, a co dopiero przetwarzać. Można by próbować przetwarzać je natychmiast gdy przychodzą, ale po pierwsze wymagało by to olbrzymich mocy obliczeniowych, a po drugie chcąc znaleźć związek między dwoma zdarzeniami musimy móc odnaleźć kilka z nich, które zaszły w różnym czasie.

Gromadzenie danych - systemy plików

Musimy więc gdzieś składować te dane i potem pobierać, a że nie zmieszczą się one na jednej maszynie to potrzebujemy sieciowych systemów plików. Jednym z pierwszych powstałych tego typu rozwiązań jest system GFS (Google File System). Przechowuje on dane w dużych 64MB plikach, które przechowywane są na tzw. Chunk Servers, Dane są zapisane nadmiarowo (redundancja) w celu zabezpieczenia przed stratą, a dostęp do nich odbywa się za pośrednictwem serwera Master, który przechowuje metadane wszystkich plików. Ponieważ służą one głównie wyszukiwarce to metadane mapują hasła wyszukiwania do odpowiednich plików. Często używane dane znajdują się w cache Mastera, ale jeśli nie ma ich tam to muszą zostać odnalezione i ściągnięte do niego. Zatem gdy wyszukujemy czegoś,co jest mało popularne w sieci, trwa to nieco dłużej.
System plików Google jest rozwiązaniem własnościowym (podobnie jak Amazon S3) i inne firmy musiały wypracować własne rozwiązania. Jednak dzięki rozwojowi ruchu Open Source i chęci współpracy firm przy jego rozwoju, nie każdy musi wymyślać koło od nowa i pisać własne rozwiązania. Dominującym rozwiązaniem stosowanym przez większość firm zapisujących Big Data jest Hadoop (Hadoop Distributed File System – HDFS). System ten został napisany w języku Java, a inspiracją był oczywiście GFS wraz z modelem MapReduce zapoczątkowanym przez tę samą firmę.

Hadoop tworzony jest pod egidą organizacji Apache Fundation i rzecz jasna wydawany jest na licencji Apache 2.0. Sprawia to, że każda firma zamiast tworzyć własne rozwiązania woli korzystać z HDFS. Sam system plików jest też częścią całego frameworka, w skład który wchodzą potrzebne biblioteki, narzędzia czy MapReduce. Na nim opiera się cały ekosystem różnych modułów i projektów jak przykładowo: Apache Zookeeper, Apache Spark, Apache Hive, Apache Storm itp.
Istnieją również inne rozwiązania, zarówno otwarto-źródłowe jak i zamknięte. Ich popularność jednak jest niewielka i ograniczona do określonych zastosowań.

Bazy danych

Do przechowywania i wyszukiwania danych nie korzysta się z baz SQL, tylko NoSQL. Najprostszy sposób to użycie bazy takiej jak przykładowo MongoDB. Nie wymaga ona tworzenia klastrów z HDSF-em. Wystarczą zwykłe komputery z zainstalowanymi bazami, na których konfiguruje się replikację i rolę danej maszyny. Dla bardzo dużych ilości danych bazy te są zbyt mało wydajne (znane są przykłady przechowywania niecałych 0,5PB danych).

Inne bazy NoSQL dla dużej ilości przechowywanych informacji to np.: HBase (należące do ekosystemu Hadoop), Cassandra, BigTable (Google), Riak. To tylko niektóre najpopularniejsze, a jest w czym wybierać.

Pobieranie, dostarczanie i przesyłanie treści.

Przetwarzanie danych wygląda z grubsza w taki sposób, że dane musimy pobrać, przetworzyć dane i z powrotem zapisać. Można pobierać dane z bazy, bezpośrednio z sieciowego systemu plików (np. HDSF), serwerów mailowych, stron internetowych itp. Oprogramowanie pracujące nad danymi może pobierać i odsyłać je równocześnie do wielu różnorodnych źródeł i miejsc docelowych ich przechowywania.

Przydatnym narzędziem jest oprogramowanie pośredniczące między źródłami i miejscami składowania przetworzonych danych, czyli tzw. message broker. Najbardziej popularnym tego typu oprogramowaniem jest Kafka (dla Big Data)

Dzięki niemu programiści nie muszą się zastanawiać w jaki sposób pobierać i przesyłać dane w sieci. Dostarczyciele danych, nazywani producentami, mogą być różnego typu, tak samo jak odbiorcy, czyli konsumenci.

Konsumentami treści najczęściej są frameworki, które pomagają stworzyć schemat analizy danych. Dane mogą być wielokrotnie przetwarzane co wymaga stworzenia kolejności ich przetwarzania, najczęściej w formie grafu acyklicznego. Dwa najpopularniejsze systemy tego typu to: Apache Storm i Apache Spark. Ten drugi to obecnie chyba najpotężniejsze i najbardziej wielostronne narzędzie tego typu.

Posiada on takie dodatkowe moduły jak Machnie Learning (uczenie maszynowe), czy moduł naśladujący zachowanie bazy danych SQL.

Język programowania

Omówione narzędzia są frameworkami wymagającymi napisania kodu, który je wykorzysta. Większość oprogramowania do Big Data dostarcza API w takich językach jak Java, Scala, Python czy R. Jednak najbardziej znaczący wydaje się fakt, że wiele z tego oprogramowania (może nawet większość z najpopularniejszych rozwiązań) została napisana w Scali, w tym Apache Spark i Kafka (Storm napisano w Clojure). Wykorzystują one schemat przetwarzania typowy dla języków funkcyjnych, stosują się też do Reactive Manifesto. Użycie Scali wynika właśnie z jej funkcyjnego charakteru, wygodnej składni, która nie zmusza do pisania tylko w stylu funkcyjnym, ale umożliwia również pisanie zarówno obiektowe jak i w stylu imperatywnym.

Jednym z głównych elementów przyciągających programistów do używania Scali jest framework Akka, implementujący model aktorów (po raz pierwszy użyty w Erlangu). Pozwala on w dużo prostszy i bezpieczniejszy sposób tworzyć wydajne i lekkie aplikacja wielowątkowe.
Dzięki użyciu Scali możemy zarówno wykorzystać API frameworków, ale również rozbudować je o własne elementy w wygodny i szybszy sposób niż przy użyciu innych narzędzi. Zatem jeśli nie chcemy tylko wykorzystać standardowych możliwości tych frameworków warto zastanowić się nad użyciem Scali. Nie trudno też zrozumieć skąd w najpopularniejszych językach programowania (np. w Javie) widzimy takie parcie na elementy funkcyjne. Ułatwiają one pisanie kodu dla systemów współbieżnych, skracają często ilość linii i świetnie sprawdzają się przy przetwarzaniu dużych danych.

Widać, że gałąź IT związana z Big Data będzie w najbliższych latach gwałtownie rosnąć. Być może warto zainteresować się tym tematem i pokierować swoją ścieżkę rozwoju zawodowego tę stronę. Jeśli nawet Microsoft szuka programistów Scali to coś musi być na rzeczy ;)

Źródło:
forbes.com