Kiedy warto postawić na Apache Spark?
Wojtek Ptak to współzałożyciel i konsultant grupy eksperckiej Intelligene oraz CTO w firmie FreshMail, gdzie rozwija zespół oraz pracuje głównie nad rozwiązaniami biznesowymi opartymi o analizę danych na wielką skalę z wykorzystaniem Machine Learning, oraz AI. Tam wraz z zespołem współtworzy nowoczesne rozwiązania zwalczające spam i phishing, które opiera się o zastosowania AI w skali dziesiątków milionów wiadomości e-mail każdego dnia.
Przez prawie 10 lat współtworzył firmę Ministry of Ideas, gdzie pracował jako konsultant i architekt przy projektach integracji silosów danych, ich analizy oraz projektach transformacji organizacji w data-driven organisations. Współpracował m.in. z The Coca-Cola Company, American Bankers Association, Macy’s, Heineken, Saks 5th Avenue, BP, Boots, Polo Ralph Lauren, Homebase, Porsche oraz z wieloma innymi.
Jego prelekcji będzie można wysłuchać podczas zbliżającej się Konferencji Infoshare 2019. My porozmawialiśmy z nim o środowisku Apache Spark i zapytaliśmy go o to, kiedy jego zdaniem warto go używać.
Jakie są, z Twojego doświadczenia, oznaki, że ktoś chce użyć Apache Spark tam, gdzie sprawdziłoby się dużo prostsze rozwiązanie?
WP: Na tak postawione pytanie warto spojrzeć z kilku perspektyw:
- Czy firma ma jasno zdefiniowane wymagania biznesowe co do problemu, który chce rozwiązać?
- Czy posiada ona odpowiednio doświadczony zespół i odpowiednie metodologie oraz praktyki tworzenia aplikacji? Np. czy ma stworzone i opracowane procedury tworzenia, integracji, wdrażania i utrzymania aplikacji, opartych o Apache Spark?
- Czy firma posiada odpowiedni zbiór danych?
- Czy firma ma już środowisko do pracy, wspierające Apache Spark (np. klaster Hadoop lub Kubernetes, czy rozwiązania chmurowe wspierające Apache Spark np. Azure Databricks lub Google Cloud Dataproc itd.)?
- Czy rozwiązanie problemu wymaga analizy ogromnych ilości danych? Czy podchodząc do problemu, można go rozwiązać przy pomocy prostszych narzędzi?
Warto dodać, że wiele z powyższych aspektów, jeżeli nie jest wdrożonych w firmie, może wymagać znacznych nakładów oraz zbudowania odpowiedniego środowiska. To z kolei wymaga doświadczonych profesjonalistów. Jeżeli firma nie ma możliwości budowy tego typu rozwiązań, a chce inwestować w zaawansowane rozwiązania, jak Apache Spark, to jest to bardzo dobra oznaka, że warto się pochylić nad analizą problemu i spróbować podejść do niego inaczej. Jeżeli ten problem, to np. rekomendacja milionów produktów (lub książek, filmów, piosenek) setkom tysięcy lub milionom użytkowników, analiza ryzyka oparta o miliony zgromadzonych case-ów, analiza fraudów (ale też spamu lub phishingu) w oparciu o setki milionów lub miliardów transakcji czy rozbudowana analiza oparta o setki tysięcy, lub milionów parametrów danego problemu gromadzonych w znacznym okresie (np. analiza danych z rozbudowanych urządzeń, jak aparatura naukowa, samoloty czy statki) - prawdopodobnie Apache Spark jest najlepszym rozwiązaniem.
Jeżeli jednak nie są to podobne przypadki, to z mojego doświadczenia wiem, że bardzo dogłębne zrozumienie problemu biznesowego jest kluczowe i niejednokrotnie odpowiednie podejście do niego pozwala uprościć znacznie rozwiązanie. Często prostsze rozwiązanie daje równie dobre efekty przy dużo mniejszym koszcie wytworzenia, wdrożenia i utrzymania. Dodatkowo - może być stworzone przez zespół o bardziej ogólnych kompetencjach programistyczno-analitycznych, nie wymagając tworzenia dedykowanego zespołu.
Który koncept Apache Spark najczęściej sprawia problem deweloperom, którzy z nim zaczynają?
WP: Jest kilka aspektów, które są trudne dla osób zaczynających praktyczną pracę z Apache Spark w środowisku produkcyjnym. Po pierwsze najczęściej jest on wykorzystywany w klastrach opartych o środowisko Apache Hadoop. Korzystanie z Apache Spark wymusza więc dobre zrozumienie całego, bardzo rozbudowanego i skomplikowanego ekosystemu. Jest wiele technologii, które należy poznać, charakterystyka wielu z nich bardzo wpływa na sposób tworzenia i utrzymania zadań w klastrze. Warto wymienić Apache Kafka (komponentu integrującego systemy), przez HDFS (sposobu rozproszonego zapisu i odczytu plików), YARN (czyli zarządzania zasobami obliczeniowymi) oraz wszelkie bazy danych oparte o Apache Hadoop, czyli np. Hive, Impala lub HBase itd.
Dla programistów Apache Spark jest problematyczny już z samej racji bycia tzw. systemem rozproszonym, który jest dużo bardziej skomplikowany od zwykłych modeli programowania. Często musimy pamiętać o tym, gdzie i w jakiej formie znajdują się nasze dane, jak je zbieramy, przetwarzamy i zapisujemy. Musimy pamiętać o odpowiednim zużyciu pamięci - bardzo łatwo jest nieopatrznie wczytać do pamięci ogromne ilości danych, co spowodować może bardzo nieoptymalne zużycie zasobów - od sieci, przez dyski i pamięć RAM.
Testowanie i debugowanie aplikacji opartych o Apache Spark różni się od standardowych aplikacji i nie jest tak proste. Bardzo często coś, co na środowisku deweloperskim przechodzi wszystkie testy, nie będzie dobrze i optymalnie działało w środowisku produkcyjnym, często skutkując ciężkimi w interpretacji błędami.
Z innej perspektywy utrzymanie Apache Spark w produkcyjnym środowisku jest również dość skomplikowanym zadaniem. Jeżeli decydujemy się na własny klaster, musimy się liczyć z koniecznością posiadania w zespole odpowiednich specjalistów, którzy zadbają o niego. Konieczne będzie zewnętrzne wsparcie lub szkolenie albo zatrudnienie odpowiednich osób do naszego zespołu.
Jeszcze jednym aspektem, o którym warto pamiętać, są języki, które wspiera Apache Spark - większość osób wchodzących w Data Science korzysta z Pythona lub R. Obydwa języki są wspierane przez Apache Spark (odpowiednio PySpark, SparkR), natomiast ich wsparcie jest ograniczone i dużo mniej zoptymalizowane w porównaniu do języka natywnego dla tej platformy, tj. Scali.
Efektywne i optymalne wykorzystanie Apache Spark wiąże się niejednokrotnie z programowaniem zadań w Javie lub Scali, co wymusza na osobach pracujących z danymi uczenie się nowych języków. Warto wspomnieć, że mamy do dyspozycji także Spark SQL, który jest bardzo mocno optymalizowany, a jednocześnie ułatwia pracę z danymi dla osób doświadczonych w obróbce danych.
Jaki jest idealny use case dla Apache Spark?
WP: Zakładamy oczywiście, że mówimy o odpowiednio dużych zbiorach rozproszonych danych, czyli zakres kilkudziesięciu TB do setek PB. Po pierwsze warto odpowiedzieć - gdzie sprawdza się na pewno Apache Spark? Jego ogromna zaleta polega na zdolności do łączenia bardzo różnych technik i procesów w jedną spójną całość. Poza tym środowiskiem proces pobrania odpowiednich danych (niejednokrotnie) z różnych źródeł, przekształcania na różne sposoby, wykonania odpowiednich zadań analitycznych i zapisu wyników, wymagają często osobnych narzędzi.
Dodatkowo sam w sobie oferuje możliwość łączenia różnych języków programowania, narzędzi oraz łączenia analizy wsadowej, strumieniowej i użycia interaktywnych tzw. workflows, co biorąc pod uwagę jedno, spójne środowisko znacznie zwiększa produktywność osób z niego korzystających. Warto dodać, że wiele firm bardzo aktywnie wspiera rozwój tego narzędzia, co zapewnia bardzo duże wsparcie ogromnego community wokół narzędzia, a nowe wersje dodają coraz to bardziej rozbudowane funkcjonalności, w tym intensywny rozwój analityki strumieniowej i uczenia maszynowego wewnątrz samego środowiska.
Tak jak wspomniałem wcześniej, istnieje wiele bardzo dobrych zastosowań Apache Spark. Szczególnie sprawdzi się on, jeżeli ilość analizowanych przypadków, produktów, bądź zdarzeń sięga milionów lub miliardów. Idealne przypadki to:
- Nasze główne użycie Apache Spark to analiza fraudów. W naszym przypadku to wykrywanie nadużyć w komunikacji marketingowej, czyli spamu, scamu lub phishingu. Opieramy się o dane historyczne i w czasie rzeczywistym analizując wiele miliardów rekordów, tworząc odpowiednie modele scoringowe.
- Systemy rekomendacji ogromnej ilości produktów, książek, filmów lub piosenek wielkiej ilości użytkowników, także w czasie rzeczywistym.
- Analiza biznesowa dużej ilości KPIs w oparciu o ogromną ilość metryk, np. analiza ryzyka lub zachowań klientów oparte o miliony zgromadzonych case-ów
- Analiza ogromnej ilości parametrów gromadzonych w czasie (np. naukowych, z działań urządzeń, maszyn itd.). Jednym z najbardziej znanych przypadków to wykorzystanie w CERN-ie do przeprowadzania analizy danych z LHC. Miesięcznie gromadzonych jest tam kilkanaście PB danych, a zespół opracował specjalne środowisko do analizy danych, oparte o Apache Hadoop i Apache Spark.
- Inne podobne, gdzie mamy do czynienia z analizą dużej ilości faktów.
Czemu wybrać Apache Spark, a nie konkurencyjne rozwiązanie?
WP: Dostajemy do ręki narzędzie, które zapewnia nam bardzo dojrzałe środowisko do pracy z danymi. Apache Spark to kompletna platforma, która po poznaniu daje możliwość bardzo spójnego i rozbudowanego podejścia do problemu pobrania, filtrowania, analizy (w tym uczenia maszynowego) i zapisu wyników.
Jeżeli naszym wyzwaniem jest zebranie i analiza ogromnych ilości danych, szczególnie wykorzystując dane historyczne, często z różnych źródeł - to Apache Spark będzie bardzo dobrym rozwiązaniem. Trwa wiele prac nad możliwością użycia tej technologii poza Apache Hadoop, w tym Kubernetes. Daje to świetną perspektywę stabilnej rozproszonej platformy obliczeniowej i analizy danych. Jest on również mocno wspierany przez wszystkich kluczowych graczy chmurowych.
Za Apache Spark stoi też bardzo duże community. Mamy do dyspozycji duże wsparcie, wiele wysokiej jakości szkoleń dla naszych członków zespołów, a także - wsparcie wielu bardzo dużych firm, które aktywnie rozwijają Apache Spark (np. Databricks, IBM, Microsoft, Amazon, Yahoo!, Netflix i wielu innych). Jest to bardzo duża zaleta - inwestujemy w platformę, która stała się i będzie standardem przez wiele lat.
Dlaczego warto zobaczyć właśnie Twoją prelekcję na konferencji Infoshare?
WP: Serdecznie zapraszam na dwie moje prezentacje na Konferencji Infoshare: jedna na scenie DevTrends, a druga na DeepTech. Na obydwu postaram się przybliżyć z praktycznego punktu widzenia tematykę pracy z danymi, praktycznego użycia uczenia maszynowego, pokazać case studies z praktycznego punktu widzenia, ale także postaram się zaskoczyć czymś nowym i ciekawym. Obiecuję być również dostępny i chętnie podzielę się wiedzą i doświadczeniem - wiem, że na pewno będzie taka możliwość. Czekam na tegoroczną edycję z niecierpliwością!