Oczekiwania vs Rzeczywistość
Kiedy podjąć decyzję biznesową ?
Extract, Transform, Load is a basic pattern for data processing, commonly known in data warehousing. It’s all about extracting data from a source, transforming the data (business rules) and at the end writing/loading everything to a target (Hadoop, Relational Database, Data Warehouse etc.)
Systemy Big data mogą być częścią (źródłem) dla hurtowni danych (np. Data Lake, Enterprise Data Hub)
Ale Hurtownie danych nie są systemami Big Data!
Znajdź prosty algorytm map reduce w dowolnym języku programowania i uruchom go.
Jak poprawić ?
Zapoznaj się z tematem danych strumieniowych
Definicja - Zdarzenie czyli wszystko co możemy zaobserwować w pewnej chwili czasu. Definija - W przypadku danych zdarzenie rozumiemy jako niezmienialny rekord w strumieniu danych zakodowany jako JSON, XML, CSV lub binarnie.
Które z wymienionych zdań nie przedstawiają zdarzeń?
Definicja - Ciągły strumień zdarzeń to nieskończony zbiór pojedynczych zdarzeń uporządkowanych w czasie np. logi z urządzenia.
Systemy generujące ciągłe strumienie zdarzeń:
Analityka strumieniowa pozwala na szybkie wyłapywanie trendów i wyprzedzenie konkurencji używającej tylko przetwarzania wsadowego. Reakcja na nagłe zdarzenia na giełdzie czy w sieciach społecznościowych w celu zapobiegania bądź mininalizowania strat.
Przedsiębiorstwo to organizacja, która generuje i odpowiada na ciągły strumień zdarzeń.
Definicja - Strumień danych to dane tworzone przyrostowo w czasie, generowane ze statycznych danych (baza danych, czytanie lini z pliku) bądź w sposób dynamiczny (logi, sensory, funkcje).
Analityka strumieniowa (ang. stream analytics) nazywana jest również przetwarzaniem strumieniowym zdarzen (ang. event stream processing) - przetwarzanie dużej ilości danych już na etapie ich generowania.
Generowane są jako bezpośredni skutek działania.
Niezależnie od zastosowanej technologi wszystkie dane powstają jako ciągły strumień zdarzeń (działania użytkowników na stronie www, logi systemowe, pomiary z sensorów).
Znajdź proces w którym tworzona jest cała tabela danych na raz ?
Aplikacja przetwarzająca strumień zdarzeń powinna umożliwiać przetworzenie i zapisanie zdarzenia oraz dostęp (w tym samym czasie) do innych danych tak by móc dane zdarzenie przetworzyć (wykonać na nim dowolne przeliczenie) i zapisać jako stan lokalny
.
Stan ten może być zapisywany w wielu miejscach np. zmienne w programie, pliki lokalne, wew i zew bazy danych. Jedną z najbardziej znanych aplikacji tego typu jest Apache Kafka, którą można łączyć np. z Apache Spark bądź Apache Flink.
Znajdź info jak działają systemy przetwarzające logi.
Tego typu aplikacje wykorzystuje się w trzech klasach aplikacji:
Prawdziwe realizacje najczęściej korzystają z kilku klas w jednej aplikacji.
Wszystkie Event-driven aplikacje przetwarzają dane jako Stateful stream processing przetwarzając zdarzenia z pewną ustaloną (najczęćiej biznesową) logiką. Aplikacje te mogą wywoływać akcje w odpowiedzi na przeanalizowane zdarzenia np. wysłać alarm w postaci sms lub email, zapisać i przekazać odpowiedni event (np. fraud) do aplikacji wyjściowej (consumer).
Standardowym zastosowaniem tego typu aplikacji są:
Aplikacje tego typu traktuje się jako naturalną evolucję mikroserwisów. Komunikują się one między sobą wykorzystując zapytania typu REST (koniecznie sprawdź gdzie ich używasz !!!) z wykorzystaniem sturturalnych danych. Korzystają również z danych w postaci JSON.
Czym jest REST ?
Komunikacja logami (najczęściej asynchroniczna) wyróżnia aplikacje wysyłającą (producer) oraz aplikację konsumującą (consumer).
Co to komunikacja asynchroniczna ?
Dane generowane przez firmy najczęściej przechowywane są w wielu różnych formatach i strukturach danych, co związane jest z wykorzystaniem różnych systemów np. relacyjne i nierelacyjne bazy danych, logowanie zdarzeń, systemy plików (np Hadoop), przechowywanie w pamięci etc. Zapis tych samych danych w różnych systemach zwiększa ich dostępność i łatwość przetwarzania.
Jednak takie podejście wymaga aby systemy te były ze sobą zawsze zsynchronizowane (zawierały te same dane).
Tradycyjne podejście synchronizacji danych to wykonywanie okresowo zadań ETL. Jendak bardzo często nie spełniają one założeń wydajnościowych i jakościowych (czas przetwarzania). Alternatywnie moża użyć informacji rozsyłanych w event logach. W tej sytuacji agregacje czy normalizacja danych mogą być przeprowadzane dopiero podczas przetwarzania danego zdarzenia.
Tego typu aplikacje, które pozwalają osiągnąć bardzo dużą wydajność (niską latencje) nazywamy data pipelines
.
W ogólności to aplikacje czytające dużo danych z różnych aplikacji wejściowych i przetwarzających wszystko w bardzo krótkim czasie (np Kafka, Apache Flink).
Zadania ETL okresowo (i periodycznie w czasie) importują dane do bazy danych, przy czym dane te są przetwarzane przez zaplanowane zapytania.
Niezależnie od architektury hurtowni danych (lub składników np. Hadoop) przetwarzanie to jest przetwarzaniem batchowym
.
Procesy analityczne (OLAP) wykonywane są na hurtowni, która uzupełniana jest w powyżej opisany sposób. Mimo, iż periodyczne uzupełnianie danych (czyli cały proces ETL) to swego rodzaju sztuka
to wprowadza ona w proces analityczne spore opóźnienia.
W zależności od harmonogramu dogrywania danych kolejny punkt danych może pojawić się po godzinie lub nawet kilku dniach.
Nawet w przypadku ciągłego uzupełniania hurtowni (data pipeline app) wciąż pojawia się znaczne opóźnienie w analitycznym odpytywaniu takiej bazy.
O ile takie opóźnienia były akceptowalne w przeszłości, dzisiejsze aplikacje muszą zbierać, przetwarzać i analizować dane w czasie rzeczywistym (personalizowanie zachowań użytkownika na stronach www czy dynamiczna zmiana warunków w grach mobilnych).
Zamiast czekać na okresowe wyzwalanie, aplikacja do analizy strumieniowej w sposób ciągły pobiera strumienie zdarzeń i aktualizuje wyniki, włączając najnowsze zdarzenia z małym opóźnieniem. Aplikacje do przesyłania strumieniowego przechowują wyniki w zewnętrznym magazynie danych, który obsługuje wydajne aktualizacje (wydajna baza danych lub baza oparta o klucz-wartość). Odświerzane na żywo wyniki działania aplikacji przesyłania strumieniowego mogą zasilać różnego rodzaju wykresy (prezentowane na żywo).
Strumieniowe Aplikacje Analityczne używane są w: