Apache Spark to platforma typu open-source do przetwarzania dużych ilości danych zbudowana na podstawie szybkości, łatwości użycia i zaawansowanej analityki. Pierwotnie została opracowana na UC Berkeley w 2009 roku. Jest to największy projekt o otwartym kodzie źródłowym w przetwarzaniu danych.
Od momentu premiery Apache Spark jest szybko adaptowany przez przedsiębiorstwa z różnych branż. Internetowe potęgi, takie jak Netflix, Yahoo i eBay, wdrożyły Spark na masową skalę, wspólnie przetwarzając wiele petabajtów danych. Spark szybko stał się największą społecznością open source w dużych danych, z ponad 1000 współpracowników z ponad 250 organizacji.
Spark jest przeznaczony do nauki danych, a jego abstrakcja ułatwia naukę danych. Naukowcy zajmujący się danymi zwykle używają uczenia maszynowego – zestawu technik i algorytmów, które mogą uczyć się na danych. Algorytmy te są często iteracyjne, a zdolność Spark do buforowania zbioru danych w pamięci znacznie przyśpiesza takie wielokrotne przetwarzanie danych, co czyni Spark idealnym mechanizmem przetwarzania do implementacji takich algorytmów. Spark zawiera także bibliotekę MLlib, która zapewnia rosnący zestaw algorytmów maszynowych dla powszechnych technik nauki danych: klasyfikacja, regresja, filtrowanie grupowe, klastrowanie i redukcja wymiarów.
Spark Core to rdzeń i podstawowy silnik wykonawczy dla platformy, na której opiera się cała inna funkcjonalność. Zapewnia przetwarzanie w pamięci i tworzenie zestawień danych w zewnętrznych systemach pamięci masowej.
Spark SQL jest głównym elementem Spark Core, który wprowadza dane nazwane SchemaRDD, które zapewniają obsługę danych strukturalnych i półstrukturalnych.
Spark Streaming wykorzystuje szybką zdolność planowania Spark Core do wykonywania analiz strumieniowych. Przechwytuje dane w mini-partiach i wykonuje transformacje RDD (Resilient Distributed Datasets) na tych mini-partiach danych.
MLlib to biblioteka uczenia maszynowego, która udostępnia różne algorytmy zaprojektowane do skalowania w klastrze w celu klasyfikacji, regresji, grupowania, filtrowania grupowego itd.. Niektóre z tych algorytmów działają również z danymi strumieniowymi, takimi jak regresja liniowa wykorzystująca zwykłe najmniejsze kwadraty lub k-średnie (i więcej w drodze).
GraphX to rozproszone środowisko przetwarzania wykresów na Spark. Zapewnia interfejs API do wyrażania obliczeń graficznych, który może modelować wykresy zdefiniowane przez użytkownika za pomocą interfejsu API abstrakcji Pregel. Zapewnia również zoptymalizowane środowisko wykonawcze dla tej abstrakcji. Oprócz wbudowanych operacji manipulacji wykresami, zapewnia bibliotekę typowych algorytmów graficznych, takich jak PageRank.
Zaprojektowany od podstaw dla wydajności, Spark może być 100 razy szybszy niż Hadoop do przetwarzania danych na dużą skalę poprzez wykorzystanie w obliczeniach pamięci i innych optymalizacjach. Spark jest również szybki, gdy dane są przechowywane na dysku, a obecnie posiada rekord świata do sortowania na dużą skalę na dysku.
Spark ma łatwe w użyciu interfejsy API do obsługi dużych zbiorów danych. Obejmuje to zbiór ponad 100 operatorów do przekształcania danych i znanych interfejsów API ramek danych do manipulowania danymi półstrukturalnymi.
Spark jest dostarczany z bibliotekami wyższego poziomu, w tym obsługą zapytań SQL, danych strumieniowych, uczenia maszynowego i przetwarzania wykresów. Te standardowe biblioteki zwiększają produktywność programistów i można je płynnie łączyć w celu tworzenia złożonych przepływów pracy.
Szeroka gama bibliotek Spark i możliwość obliczania danych z wielu różnych typów magazynów danych oznacza, że Spark może być stosowany do wielu różnych problemów w wielu branżach. Firmy zajmujące się reklamą cyfrową wykorzystują je do przechowywania baz danych kampanii internetowych i kampanii projektowych dostosowanych do konkretnych klientów. Firmy finansowe wykorzystują je do spożywania danych finansowych i prowadzenia modeli, które mają na celu ukierunkowanie działalności inwestycyjnej. Firmy produkujące dobra konsumpcyjne wykorzystują je do agregowania danych klientów i prognozowania trendów, aby kierować decyzjami dotyczącymi inwentaryzacji i dostrzegać nowe możliwości rynkowe.
Spark obsługuje i pomaga w optymalizacji kroków w przepływach pracy przetwarzania danych. Zapewnia wyższy poziom API w celu poprawy wydajności programistów i spójny model architekta dla rozwiązań Big Data. Spark przechowuje wyniki pośrednie w pamięci, zamiast zapisywać je na dysku, co jest bardzo przydatne, szczególnie gdy trzeba wielokrotnie pracować nad tym samym zestawem danych. Został zaprojektowany jako silnik wykonawczy, który działa zarówno w pamięci, jak i na dysku. Operatory Spark wykonują operacje zewnętrzne, gdy dane nie mieszczą się w pamięci. Spark może być używany do przetwarzania zbiorów danych większych niż zasegregowana pamięć w klastrze.
Spark będzie próbował przechowywać tyle danych, ile ma pamięci, a następnie rozleje się na dysk. Może przechowywać część zbioru danych w pamięci i pozostałe dane na dysku. Dzięki temu przechowywaniu danych w pamięci Spark ma przewagę wydajności.
Inne funkcje Sparka to:
Spark jest napisany w języku programowania Scala i działa w środowisku Java Virtual Machine (JVM). Obecnie obsługuje następujące języki do tworzenia aplikacji za pomocą Spark: Scala, Java, Pyton, Clojure i R.
Szeroka gama bibliotek Spark i możliwość obliczania danych z wielu różnych typów magazynów danych oznacza, że Spark może być stosowany do wielu różnych problemów w wielu branżach. Firmy zajmujące się reklamą cyfrową wykorzystują je do przechowywania baz danych kampanii internetowych i kampanii projektowych dostosowanych do konkretnych klientów. Firmy finansowe wykorzystują je do spożywania danych finansowych i prowadzenia modeli w celu ukierunkowania działalności inwestycyjnej. Firmy produkujące dobra konsumpcyjne wykorzystują je do agregowania danych klientów i prognozowania trendów, aby kierować decyzjami dotyczącymi inwentaryzacji i dostrzegać nowe możliwości rynkowe.