Cykl o big data
06 Dec 2014W tym cyklu artykułów chciałbym poruszyć szereg zagadnień związanych z przetwarzaniem tzw. big data, szczególnie skupiając się na strumieniach danych. Cykl ma docelowo składać się z szeregu artykułów, obejmujących wykorzystanie narzędzi: Kafka, Storm i Spark. Nie obejdzie się też bez pewnych zagadnień teoretycznych, związanych z przetwarzaniem w środowisku rozproszonym.
W ramach artykułów, będę się posiłkował dwoma stworzonymi specjalnie w tym celu projektami na Githubie: simple-kafka-storm-java oraz simple-kafka-spark-java. Kolejne artykuły będą się pojawiać co jakiś czas, w miarę postępów i w zależności od ilości wolnego czasu :-)
Wprowadzenie do big data
Krótko o wyzwaniach związanych z przetwarzaniem dużych ilości danych, czym faktycznie jest big data, kiedy naprawdę trzeba skorzystać z technologiami big data, a także o tym, jakie są dwa główne rodzaje przetwarzania danych w big data: przetwarzanie strumieni danych oraz map-reduce.
Apache Kafka
Jak działa i jaka jest architektura Kafki, w jaki sposób można uruchomić Kafkę do celów testowych, jaka jest rola nadawców, odbiorców i grup odbiorców, jak w Kafce działa replikacja. Zaprezentowany jest także prosty przykład wykorzystania Kafki w Javie, którego źródło możesz znaleźć w projekcie simple-kafka-storm-java.
Apache Storm
Czym jest Apache Storm, czym są topologie, spouts i bolts. Jakiego rodzaju gwarancje daje Storm i jak działa przetwarzanie strumieni danych. Zaprezentowany jest także prosty przykład wykorzystania Storm wraz z Kafką w Javie, którego źródło możesz znaleźć w projekcie simple-kafka-storm-java.
Apache Strom Trident
Czym różni się Storm Trident od Storm, jakiego rodzaju problemy ma rozwiązań, jakiego rodzaju daje gwarancje dotyczące przetwarzania danych i jaki model przetwarzania wykorzystuje. Zaprezentowany jest także prosty przykład wykorzystania Storm Trident wraz z Kafką w Javie, którego źródło możesz znaleźć w projekcie simple-kafka-storm-java.
Interludium: Monady i monoidy
W tym momencie korzystna jest chwila wytchnienia i nieco bliższe przyjrzenie się teoretycznym fundamentom rozproszonego przetwarzania danych. Omówione zostaną podstawowe założenia programowania funkcyjnego i przede wszystkim monady i monoidy, bez których znajomości nie można dojrzale dyskutować o paradygmacie map-reduce.
Apache Spark
Jak to często bywa w takich sytuacjach, zanim Spark powstał i stał się fajny, największe firmy zaczęły już korzystać z innych narzędzi (np. Hive i Pig). Tym razem jednak dzieje się coś dziwnego: zamiast ściśle trzymać się tego, co już dobrze znane, nawet te firmy w coraz większym stopniu korzystają ze Spark i znajdują dla niego nowe zastosowania. W tym kontekście należy odpowiedzieć na pytania, jakie jest miejsce Apache Spark w technologiach big data, czym Spark się różni od innych narzędzi, jakich ma głównych konkurentów i dlaczego jest najbardziej dynamicznie rozwijającym się narzędziem big data.
Jak działa Spark i Spark Streaming
Tutaj bardziej szczegółowo, niż w poprzednim artykule, omówiona jest filozofia Apache Spark oraz Spark Streaming. Pokazane są także przykłady wykorzystania Spark w Javie, którego źródło możesz (będziesz mógł) znaleźć w projekcie simple-spark-java. W tym przykładzie Spark Streaming zostanie też zintegrowany z Kafką.
Słowniczek
W ramach artykułu opisuję po polsku technologie, których pojęcia często nie mają jeszcze polskich odpowiedników. Najpierw zastanawiałem się, czy zamiast szukać na własną rękę takich odpowiedników, nie posługiwać się po prostu angielskimi terminami. Wydaje mi się jednak, że takie podejście sprawiłoby, że artykuł czytałoby się mniej płynnie. Zresztą sam nie lubię większości kalek z języka angielskiego, które funkcjonują w środowisku IT.
W ostateczności postanowiłem więc poszukać polskich odpowiedników, a w artykułach będę zamieszczał angielskie nazwy przy pierwszym użyciu danego terminu. Na końcu każdego z artykułów pojawi się też słowniczek z informacją, dlaczego niektóre pojęcia tłumaczyłem tak, a nie inaczej. Jeśli masz jakieś wątpliwości dotyczące któregoś z tłumaczeń, albo znasz funkcjonujący termin w języku polskim, którego ja nie znalazłem, napisz do mnie.
Jak uruchomić przykładowe projekty
W pierwszym projekcie simple-kafka-storm-java konieczne jest wykorzystanie Apache Storm w wersji 10, która nie jest jeszcze (w chwili pisania) dostępna w publicznych repozytoriach Mavena. Aby zainstalować Storm lokalnie, wystarczy wykonać następujące instrukcje (w dowolnym folderze):
Dzięki tym instrukcjom pobrane zostaną źródła najnowszej wersji Storm, skomplilowane i zamieszczone w Twoim lokalnym repozytorium Mavena.