Apache Spark ma swój fundament architektoniczny w resilient distributed dataset (RDD), multiset tylko do odczytu elementów danych rozproszonych na klastrze maszyn, który jest utrzymywany w sposób odporny na błędy. API Dataframe zostało wydane jako abstrakcja Na szczycie RDD, a następnie API Dataset. W Iskrze 1.x, RDD był podstawowym interfejsem programowania aplikacji (API), ale od Spark 2.x zaleca się korzystanie z API zestawu danych, mimo że API RDD nie jest przestarzałe. Technologia RDD nadal leży u podstaw API zestawu danych.,
Spark i jego RDD zostały opracowane w 2012 roku w odpowiedzi na ograniczenia w paradygmacie MapReduce cluster computing, który wymusza określoną liniową strukturę przepływu danych na rozproszonych programach: programy MapReduce odczytują dane wejściowe z dysku, mapują funkcję na danych, zmniejszają wyniki Mapy i zapisują wyniki redukcji na dysku. RDDs Spark działa jako zestaw roboczy dla rozproszonych programów, który oferuje (celowo) ograniczoną formę rozproszonej pamięci współdzielonej.,
Spark ułatwia implementację zarówno algorytmów iteracyjnych, które wielokrotnie odwiedzają swój zbiór danych w pętli, jak i interaktywnej / eksploracyjnej analizy Danych, tj. powtarzającego się zapytania danych w stylu bazy danych. Opóźnienie takich aplikacji może być zmniejszone o kilka rzędów wielkości w porównaniu z implementacją Apache Hadoop MapReduce.Do klasy algorytmów iteracyjnych należą algorytmy szkoleniowe dla systemów uczenia maszynowego, które stworzyły początkowy impuls do rozwoju Apache Spark.
Apache Spark wymaga menedżera klastrów i rozproszonego systemu pamięci masowej., Do zarządzania klastrami Spark obsługuje autonomiczny (natywny klaster Spark, w którym można uruchomić klaster ręcznie lub użyć skryptów startowych dostarczonych przez pakiet instalacyjny. Możliwe jest również uruchomienie tych demonów na jednej maszynie do testowania), Hadoop YARN, Apache Mesos lub Kubernetes. W przypadku rozproszonej pamięci masowej Spark może współpracować z wieloma różnymi systemami, takimi jak Alluxio, Hadoop Distributed File System (HDFS), MapR File System (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, Lustre file system lub można wdrożyć niestandardowe rozwiązanie., Spark obsługuje również pseudo-rozproszony tryb lokalny, zwykle używany tylko do celów programistycznych lub testowych, gdzie rozproszona pamięć masowa nie jest wymagana, a lokalny system plików może być używany; w takim scenariuszu Spark jest uruchamiany na jednej maszynie z jednym wykonawcą na rdzeń PROCESORA.
Spark CoreEdit
Spark Core jest podstawą całego projektu. Zapewnia rozproszone dyspozytorstwo zadań, harmonogramowanie i podstawowe funkcje We/Wy, ujawnione poprzez interfejs programowania aplikacji (dla Java, Python, Scala, .,NET i R) skupione na abstrakcji RDD (Java API jest dostępne dla innych języków JVM, ale jest również użyteczny dla niektórych innych języków nie-JVM, które mogą łączyć się z JVM, takich jak Julia). Interfejs ten odzwierciedla funkcjonalny / wyższego rzędu model programowania: Program „sterownik” wywołuje operacje równoległe, takie jak mapowanie, filtrowanie lub redukcja na RDD, przekazując funkcję do Spark, która następnie harmonogramuje wykonywanie funkcji równolegle na klastrze. Operacje te, a także dodatkowe, takie jak joins, przyjmują RDD jako dane wejściowe i wytwarzają nowe RDD., RDD są niezmienne, a ich operacje są leniwe; tolerancja błędów jest osiągana poprzez śledzenie „linii” każdego RDD (sekwencji operacji, które go wytworzyły), tak aby można było je zrekonstruować w przypadku utraty danych. RDD może zawierać dowolny typ obiektów Python,. NET, Java lub Scala.
oprócz funkcjonalnego stylu programowania zorientowanego na RDD, Spark dostarcza dwie ograniczone formy współdzielonych zmiennych: zmienne broadcast odwołują się do danych tylko do odczytu, które muszą być dostępne we wszystkich węzłach, podczas gdy akumulatory mogą być używane do programowania redukcji w trybie imperatywnym.,
typowym przykładem programowania funkcyjnego RDD jest następujący program Scala, który oblicza częstotliwości wszystkich słów występujących w zbiorze plików tekstowych i wypisuje najpopularniejsze. Każda mapa, flatMap (wariant Mapy) i reduceByKey przyjmuje funkcję anonimową, która wykonuje prostą operację na pojedynczym elemencie danych( lub parze elementów) i stosuje swój argument, aby przekształcić RDD w Nowy RDD.,
Spark SQLEdit
Spark SQL jest komponentem na szczycie rdzenia Spark, który wprowadził abstrakcję danych o nazwie DataFrames, która zapewnia wsparcie dla danych strukturalnych i półstrukturalnych. Spark SQL dostarcza specyficzny dla domeny język (DSL) do manipulowania ramkami danych w Scala, Java, Python lub. NET. zapewnia również obsługę języka SQL, z interfejsami wiersza poleceń i serwerem ODBC / JDBC. Mimo, że ramki danych nie posiadają sprawdzania typu w czasie kompilacji zapewnianego przez RDDs, począwszy od Spark 2.0, silnie wpisany zestaw danych jest w pełni obsługiwany przez Spark SQL.,
Spark StreamingEdit
Spark Streaming wykorzystuje funkcję szybkiego planowania Spark Core do analizy strumieniowej. Przyjmuje dane w mini-partiach i wykonuje transformacje RDD na tych mini-partiach danych. Ta konstrukcja umożliwia wykorzystanie tego samego zestawu kodu aplikacji napisanego dla analizy wsadowej w analizie strumieniowej, ułatwiając w ten sposób łatwą implementację architektury lambda. Jednak ta wygoda wiąże się z karą opóźnienia równą czasowi trwania mini-partii., Inne strumieniowe silniki danych, które przetwarzają zdarzenie po zdarzeniu, a nie w mini-partiach, obejmują Storm i komponent strumieniowy Flink. Spark Streaming ma wbudowaną obsługę z gniazd Kafka, Flume, Twitter, ZeroMQ, Kinesis i TCP/IP.
W Spark 2.x, oddzielna technologia oparta na zestawach danych, zwana Structured Streaming, która ma interfejs wyższego poziomu jest również dostarczana do obsługi streamingu.
Spark można wdrożyć zarówno w tradycyjnym lokalnym centrum danych, jak i w chmurze.,
MLlib Machine Learning LibraryEdit
Spark MLlib jest rozproszoną strukturą uczenia maszynowego opartą na Spark Core, która, w dużej mierze dzięki rozproszonej architekturze Spark opartej na pamięci rozproszonej, jest aż dziewięć razy szybsza od implementacji dyskowej używanej przez Apache Mahout (zgodnie z benchmarkami wykonywanymi przez programistów MLlib przeciwko naprzemiennym implementacjom najmniejszych kwadratów (als), a przed samym mahoutem zyskał interfejs Spark) i skaluje się lepiej niż Vowpal Wabbit.,, Gradient-Boosted Tree
graphxedit
GraphX jest rozproszonym frameworkiem do przetwarzania grafów na bazie Apache Spark., Ponieważ jest on oparty na RDD, które są niezmienne, wykresy są niezmienne i dlatego GraphX nie nadaje się do wykresów, które wymagają aktualizacji, nie mówiąc już o transakcjach, takich jak baza danych grafów. GraphX dostarcza dwa oddzielne API do implementacji masowo równoległych algorytmów (takich jak PageRank): abstrakcję Pregel i bardziej ogólne API w stylu MapReduce. W przeciwieństwie do swojego poprzednika, który został formalnie przestarzały w Spark 1.6, GraphX ma pełne wsparcie dla Wykresów właściwości (Wykresów, gdzie właściwości mogą być dołączone do krawędzi i wierzchołków).,
GraphX może być postrzegany jako Spark w pamięci wersja Apache Giraph, który wykorzystuje Hadoop disk-based MapReduce.
podobnie jak Apache Spark, GraphX początkowo był projektem badawczym w AMPLab i Databricks UC Berkeley, a później został przekazany Apache Software Foundation i Spark project.
Leave a Reply