Czym jest Apache Spark? Platforma big data, która zmiażdżyła Hadoop

Apache Spark defined

Apache Spark to platforma przetwarzania danych, która może szybko wykonywać zadania przetwarzania na bardzo dużych zbiorach danych, a także może dystrybuować zadania przetwarzania danych na wielu komputerach, samodzielnie lub w połączeniu z innymi rozproszonymi narzędziami obliczeniowymi. Te dwie cechy są kluczowe dla świata big data i uczenia maszynowego, które wymagają gromadzenia ogromnej mocy obliczeniowej, aby przebić się przez duże magazyny danych., Spark zdejmuje również część obciążeń programistycznych związanych z tymi zadaniami z barków programistów dzięki łatwemu w użyciu interfejsowi API, który usuwa większość podstawowej pracy przetwarzania rozproszonego i przetwarzania dużych danych.

od skromnych początków w AMPLab w U. C. Berkeley w 2009 roku, Apache Spark stał się jednym z kluczowych frameworków rozproszonego przetwarzania dużych danych na świecie. Spark może być wdrażany na wiele sposobów, zapewnia natywne powiązania dla języków programowania Java, Scala, Python i R oraz obsługuje SQL, strumieniowanie danych, uczenie maszynowe i przetwarzanie Wykresów., Znajdziesz go używany przez banki, firmy telekomunikacyjne, firmy gier, rządy i wszystkich głównych gigantów technologicznych, takich jak Apple, Facebook, IBM i Microsoft.

Architektura Apache Spark

na podstawowym poziomie aplikacja Apache Spark składa się z dwóch głównych komponentów: sterownika, który konwertuje kod użytkownika na wiele zadań, które mogą być rozproszone po węzłach roboczych, oraz executorów, które działają na tych węzłach i wykonują zadania przypisane do nich. Pewna forma menedżera klastrów jest konieczna do mediacji między nimi.,

Po wyjęciu z pudełka Spark może działać w trybie samodzielnego klastra, który wymaga po prostu szkieletu Apache Spark i JVM na każdej maszynie w klastrze. Jednak bardziej prawdopodobne jest, że będziesz chciał skorzystać z bardziej solidnego systemu zarządzania zasobami lub klastrami, aby zadbać o przydzielanie pracowników na żądanie. W enterprise oznacza to zwykle działanie na Hadoop YARN (w ten sposób dystrybucje Cloudera i Hortonworks uruchamiają zadania Spark), ale Apache Spark może również działać na Apache Mesos, Kubernetes i Docker Swarm.,

Jeśli szukasz rozwiązania zarządzanego, Apache Spark można znaleźć jako część Amazon EMR, Google Cloud Dataproc i Microsoft Azure HDInsight. Databricks, firma, która zatrudnia założycieli Apache Spark, oferuje również Databricks Unified Analytics Platform, która jest kompleksową usługą zarządzaną, która oferuje klastry Apache Spark, obsługę strumieniowania, zintegrowane tworzenie notebooków internetowych i zoptymalizowaną wydajność we/wy w chmurze w porównaniu ze standardową dystrybucją Apache Spark.

Apache Spark buduje polecenia przetwarzania danych użytkownika w ukierunkowany Graf acykliczny, lub DAG., DAG jest warstwą szeregowania Apache Spark; określa, jakie zadania są wykonywane na jakich węzłach i w jakiej kolejności.

Spark vs. Hadoop: po co używać Apache Spark?

warto zwrócić uwagę, że Apache Spark vs.Apache Hadoop jest nieco mylący. Znajdziesz Spark zawarte w większości dystrybucji Hadoop tych dni. Ale ze względu na dwie duże zalety, Spark stał się ramą wyboru podczas przetwarzania dużych danych, wyprzedzając Stary paradygmat MapReduce, który przyniósł Hadoop na znaczeniu.

pierwszą zaletą jest szybkość., Silnik danych Spark w pamięci oznacza, że w pewnych sytuacjach może wykonywać zadania nawet sto razy szybciej niż MapReduce, szczególnie w porównaniu z zadaniami wielostopniowymi, które wymagają zapisu stanu z powrotem na dysk między etapami. W istocie, MapReduce tworzy dwuetapowy Wykres wykonania składający się z mapowania danych i redukcji, podczas gdy dag Apache Spark ma wiele etapów, które mogą być dystrybuowane bardziej efektywnie. Nawet zadania Apache Spark, w których dane nie mogą być całkowicie zawarte w pamięci, są około 10 razy szybsze niż ich odpowiednik MapReduce.,

drugą zaletą jest przyjazne dla programistów API Spark. Równie ważne jak speedup Spark jest, można argumentować, że przyjazność API Spark jest jeszcze ważniejsza.

Spark Core

w porównaniu do MapReduce i innych komponentów Apache Hadoop, API Apache Spark jest bardzo przyjazne dla programistów, ukrywając wiele złożoności rozproszonego silnika przetwarzania za prostymi wywołaniami metod., Kanonicznym przykładem jest to, jak prawie 50 linii kodu MapReduce do liczenia słów w dokumencie może być zredukowane do kilku linijek Apache Spark (tutaj pokazano w Scali):

zapewniając powiązania z popularnymi językami do analizy danych, takimi jak Python i R, a także bardziej przyjazną dla przedsiębiorstw Javę i Scalę, Apache Spark pozwala wszystkim, od twórców aplikacji po analityków danych, wykorzystać swoją skalowalność i szybkość w przystępny sposób.,

Spark RDD

sercem Apache Spark jest koncepcja Resilient Distributed Dataset (RDD), abstrakcji programistycznej, która reprezentuje niezmienną kolekcję obiektów, które można podzielić na klaster obliczeniowy. Operacje na RDD można również podzielić na klastry i wykonywać w równoległym procesie wsadowym, co prowadzi do szybkiego i skalowalnego przetwarzania równoległego.

RDD mogą być tworzone z prostych plików tekstowych, baz danych SQL, sklepów NoSQL (takich jak Cassandra i MongoDB), łyżek Amazon S3 i wielu innych., Duża część Spark Core API jest zbudowana na tej koncepcji RDD, umożliwiając tradycyjne mapowanie i zmniejszanie funkcjonalności, ale także zapewniając wbudowaną obsługę łączenia zestawów danych, filtrowania, próbkowania i agregacji.

Spark działa w sposób rozproszony, łącząc proces rdzenia sterownika, który dzieli aplikację Spark na zadania i dzieli je między wiele procesów wykonujących pracę. Te executory mogą być skalowane w górę iw dół zgodnie z potrzebami aplikacji.,

Spark SQL

pierwotnie znany jako Shark, Spark SQL stał się coraz ważniejszy dla projektu Apache Spark. Jest to prawdopodobnie najczęściej używany przez współczesnych programistów interfejs podczas tworzenia aplikacji. Spark SQL koncentruje się na przetwarzaniu ustrukturyzowanych danych, przy użyciu podejścia dataframe zapożyczonego z R i Pythona (w pandach). Ale jak sama nazwa wskazuje, Spark SQL zapewnia również interfejs zgodny z SQL2003 do zapytań danych, przynosząc moc Apache Spark zarówno analitykom, jak i programistom.,

oprócz standardowej obsługi SQL, Spark SQL zapewnia standardowy interfejs do odczytu i zapisu do innych magazynów danych, w tym JSON, HDFS, Apache Hive, JDBC, Apache ORC i Apache Parquet, z których wszystkie są obsługiwane po wyjęciu z pudełka. Inne popularne sklepy – Apache Cassandra, MongoDB, Apache HBase i wiele innych—mogą być używane przez wyciągnięcie oddzielnych złączy z ekosystemu pakietów Spark.,

wybranie niektórych kolumn z ramki danych jest tak proste jak ta linia:

citiesDF.select("name”, "pop”)

używając interfejsu SQL, rejestrujemy ramkę danych jako tymczasową tabelę, po czym możemy wysyłać zapytania SQL przeciwko niej:

citiesDF.createOrReplaceTempView("cities”)
spark.sql("SELECT name, pop FROM cities”)

Za kulisami Apache Spark używa zapytania optymalizator o nazwie Catalyst, który bada Dane i zapytania w celu stworzenia wydajnego planu zapytań dla lokalizacji danych i obliczeń, który wykona wymagane obliczenia w całym klastrze. W Apache Spark 2.,x era, Spark SQL interface ramek i zestawów danych (zasadniczo typowana ramka danych, którą można sprawdzić w czasie kompilacji pod kątem poprawności i skorzystać z dalszej optymalizacji pamięci i obliczeń w czasie wykonywania) jest zalecanym podejściem do rozwoju. Interfejs RDD jest nadal dostępny, ale zalecany tylko wtedy, gdy nie można zaspokoić Twoich potrzeb w paradygmacie Spark SQL.

Spark 2.4 wprowadził zestaw wbudowanych funkcji wyższego rzędu do bezpośredniego manipulowania tablicami i innymi typami danych wyższego rzędu.,

Spark MLlib

Apache Spark zawiera również biblioteki do stosowania technik uczenia maszynowego i analizy wykresów do danych w skali. Spark MLlib zawiera framework do tworzenia potoków uczenia maszynowego, pozwalający na łatwą implementację wyodrębniania funkcji, selekcji i transformacji na dowolnym ustrukturyzowanym zbiorze danych. MLlib jest dostarczany z rozproszonymi implementacjami algorytmów klastrowania i klasyfikacji, takich jak k-means klastrowania i losowych lasów, które mogą być zamieniane w i z niestandardowych potoków z łatwością., Modele mogą być szkolone przez analityków danych w Apache Spark przy użyciu języka R lub Python, zapisywane przy użyciu MLlib, a następnie importowane do potoku opartego na Javie lub Scali do użytku produkcyjnego.

zauważ, że podczas gdy Spark MLlib obejmuje podstawowe uczenie maszynowe, w tym klasyfikację, regresję, klastrowanie i filtrowanie, nie obejmuje ono urządzeń do modelowania i szkolenia głębokich sieci neuronowych (szczegóły patrz przegląd Spark MLlib InfoWorld). Trwają jednak prace nad rurociągami głębokiego uczenia.,

Spark GraphX

Spark GraphX zawiera wybór rozproszonych algorytmów do przetwarzania struktur grafowych, w tym implementację PageRank Google. Algorytmy te wykorzystują podejście RDD Spark Core do modelowania danych; Pakiet GraphFrames pozwala na wykonywanie operacji wykresu na ramkach danych, w tym Korzystanie z Catalyst optimizer dla zapytań grafowych.

Spark Streaming

Spark Streaming był wczesnym dodatkiem do Apache Spark, który pomógł mu uzyskać trakcję w środowiskach wymagających przetwarzania w czasie rzeczywistym lub prawie w czasie rzeczywistym., Wcześniej przetwarzanie wsadowe i strumieniowe w świecie Apache Hadoop było osobnymi rzeczami. Piszesz kod MapReduce dla potrzeb przetwarzania wsadowego i używasz czegoś takiego jak Apache Storm do przesyłania strumieniowego w czasie rzeczywistym. Prowadzi to oczywiście do powstania różnych baz kodowych, które muszą być zsynchronizowane dla domeny aplikacji, mimo że są oparte na zupełnie różnych frameworkach, wymagają różnych zasobów i wiążą się z różnymi problemami operacyjnymi dotyczącymi ich uruchamiania.,

Spark Streaming rozszerzył koncepcję Apache Spark przetwarzania wsadowego do streamingu, rozbijając strumień na ciągłą serię mikrobatchów, które można następnie manipulować za pomocą Apache Spark API. W ten sposób kod w operacjach wsadowych i strumieniowych może współdzielić (głównie) ten sam kod, działający na tej samej platformie, zmniejszając w ten sposób obciążenie zarówno programisty, jak i operatora. Wszyscy wygrywają.,

krytyka podejścia Spark Streaming polega na tym, że mikrobatching, w scenariuszach, w których wymagana jest reakcja z niskim opóźnieniem na przychodzące dane, może nie być w stanie dorównać wydajności innych struktur obsługujących strumieniowanie, takich jak Apache Storm, Apache Flink i APEX, z których wszystkie używają czystej metody przesyłania strumieniowego, a nie mikrobatchów.

strumieniowanie strukturalne

strumieniowanie strukturalne (dodane w Spark 2.x) jest Spark Streaming tym, czym Spark SQL był dla Spark Core API: wyższego poziomu API i łatwiejszej abstrakcji do pisania aplikacji., W przypadku strumieniowego przesyłania strumieniowego, wyższy poziom API zasadniczo pozwala programistom tworzyć nieskończone strumieniowe ramki danych i zestawy danych. Rozwiązuje również pewne bardzo realne problemy, z którymi użytkownicy zmagali się we wcześniejszych ramach, zwłaszcza dotyczące radzenia sobie z agregacjami w czasie zdarzeń i opóźnionym dostarczaniem wiadomości. Wszystkie zapytania na strumieniach strukturalnych przechodzą przez Catalyst query optimizer, a nawet mogą być uruchamiane w sposób interaktywny, umożliwiając użytkownikom wykonywanie zapytań SQL na danych strumieniowych na żywo.,

Structured Streaming pierwotnie opierał się na schemacie mikrobatchingu Spark Streaming służącym do przetwarzania danych strumieniowych. Jednak w Spark 2.3 zespół Apache Spark dodał do strumieniowania strumieniowego tryb ciągłego przetwarzania o niskim opóźnieniu, umożliwiając obsługę odpowiedzi z opóźnieniami nawet 1 ms, co jest bardzo imponujące. Od wersji Spark 2.4 przetwarzanie ciągłe jest nadal uważane za eksperymentalne. Strumieniowanie strumieniowe jest zbudowane na silniku Spark SQL, natomiast strumieniowanie ciągłe obsługuje tylko ograniczony zestaw zapytań.,

strumieniowanie strumieniowe to przyszłość aplikacji strumieniowych z platformą, więc jeśli budujesz nową aplikację strumieniową, powinieneś użyć strumieniowania strumieniowego. Starsze interfejsy API strumieniowe Spark będą nadal obsługiwane, ale projekt zaleca przeniesienie na strumieniowanie strumieniowe, ponieważ nowa metoda sprawia, że pisanie i utrzymywanie strumieniowego kodu jest o wiele bardziej znośne.

potoki głębokiego uczenia

Apache Spark obsługuje uczenie głębokie poprzez potoki głębokiego uczenia., Korzystając z istniejącej struktury potoków MLlib, można wywoływać biblioteki głębokiego uczenia niższego poziomu i konstruować klasyfikatory w zaledwie kilku liniach kodu, a także stosować niestandardowe wykresy TensorFlow lub modele Keras do przychodzących danych. Te wykresy i modele można nawet zarejestrować jako niestandardowe Spark SQL UDFs (funkcje zdefiniowane przez użytkownika), dzięki czemu modele głębokiego uczenia mogą być stosowane do danych jako część instrukcji SQL.

samouczki Apache Spark

gotowy do nurkowania i nauki Apache Spark?, Gorąco polecamy Przewodnik neandertalczyka Evana Heitmana po Apache Spark w Pythonie, który nie tylko przedstawia podstawy działania Apache Spark w stosunkowo prostych słowach, ale także prowadzi przez proces pisania prostej aplikacji Pythona, która wykorzystuje Framework. Artykuł został napisany z perspektywy analityka danych, co ma sens, ponieważ data science to świat, w którym big data i uczenie maszynowe są coraz bardziej krytyczne.,

Jeśli szukasz przykładów Apache Spark, aby dać ci poczucie, co platforma może zrobić i jak to robi, sprawdź Spark by {Examples}. Jest tu mnóstwo przykładowego kodu dla wielu podstawowych zadań, które składają się na elementy składowe programowania Spark, więc możesz zobaczyć komponenty, które składają się na większe zadania, do których jest stworzony Apache Spark.

potrzebujesz wejść głębiej? DZone ma to, co skromnie nazywa się kompletną kolekcją Apache Spark, która składa się z mnóstwa pomocnych samouczków na wiele tematów Apache Spark. Szczęśliwej nauki!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Przejdź do paska narzędzi