Apache Spark heeft zijn architectonische basis in de resilient distributed dataset (RDD), een read-only multiset van data items verdeeld over een cluster van machines, die wordt onderhouden op een fout-tolerante manier. De dataframe API werd uitgebracht als een abstractie bovenop de RDD, gevolgd door de dataset API. In Vonk 1.x, de RDD was de primaire application programming interface (API), maar vanaf Spark 2.x Gebruik van de dataset API wordt aangemoedigd, ook al is de RDD API niet verouderd. De RDD-technologie ligt nog steeds ten grondslag aan de dataset API.,
Spark en zijn RDDs werden in 2012 ontwikkeld als reactie op beperkingen in het MapReduce cluster computing paradigma, dat een bepaalde lineaire dataflow-structuur forceert op gedistribueerde programma ‘s: MapReduce-programma’ s lezen invoergegevens van schijf, brengen een functie over de gegevens in kaart, verminderen de resultaten van de kaart en slaan reductieresultaten op schijf op. Spark ’s RDDs functie als een werkset voor gedistribueerde programma’ s die een (opzettelijk) beperkte vorm van gedistribueerd gedeeld geheugen biedt.,
Spark vergemakkelijkt de implementatie van zowel iteratieve algoritmen, die hun dataset meerdere keren in een lus bezoeken, als interactieve/verkennende gegevensanalyse, d.w.z. het herhaaldelijk opvragen van gegevens in databasestijl. De latentie van dergelijke toepassingen kan worden verminderd met verschillende ordes van grootte in vergelijking met Apache Hadoop MapReduce implementatie.Onder de klasse van iteratieve algoritmen zijn de training algoritmen voor machine learning systemen, die de eerste impuls voor het ontwikkelen van Apache Spark gevormd.
Apache Spark vereist een Clustermanager en een gedistribueerd opslagsysteem., Voor Clusterbeheer ondersteunt Spark standalone (native Spark cluster, waar u een cluster handmatig kunt starten of de opstartscripts van het installatiepakket kunt gebruiken. Het is ook mogelijk om deze daemons op een enkele machine te draaien voor het testen), Hadoop YARN, Apache Mesos of Kubernetes. Voor gedistribueerde opslag kan Spark communiceren met een breed scala, waaronder Alluxio, Hadoop Distributed File System (HDFS), MapR File System (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, Lustre file system, of een aangepaste oplossing kan worden geïmplementeerd., Spark ondersteunt ook een pseudo-gedistribueerde lokale modus, meestal alleen gebruikt voor ontwikkeling of testen doeleinden, waar gedistribueerde opslag is niet nodig en het lokale bestandssysteem kan worden gebruikt in plaats daarvan; in een dergelijk scenario, Spark wordt uitgevoerd op een enkele machine met een uitvoerder per CPU-kern.
Spark Coredit
Spark Core is de basis van het totale project. Het biedt gedistribueerde taak dispatching, planning, en fundamentele I / O-functionaliteiten, blootgesteld via een application programming interface (voor Java, Python, Scala,.,NET en R) gecentreerd op de RDD abstractie (de Java API is beschikbaar voor andere JVM talen, maar is ook bruikbaar voor een aantal andere niet-JVM talen die kunnen verbinden met de JVM, zoals Julia). Deze interface spiegelt een functioneel/hoger-orde model van programmering: een” bestuurder ” programma roept parallelle verrichtingen zoals kaart, filter of verminderen op een RDD door een functie aan vonk over te geven, die dan de uitvoering van de functie parallel op de cluster planningen. Deze operaties, en extra operaties zoals joins, nemen RDDs als input en produceren nieuwe RDDs., RDDs zijn onveranderlijk en hun operaties zijn lui; fouttolerantie wordt bereikt door het bijhouden van de “lineage” van elke RDD (de volgorde van bewerkingen die het produceerde), zodat het kan worden gereconstrueerd in het geval van gegevensverlies. RDDs kan elk type Python -,. net -, Java-of Scala-objecten bevatten.
naast de RDD-georiënteerde functionele stijl van programmeren, biedt Spark twee beperkte vormen van gedeelde variabelen: broadcast variabelen verwijzen alleen-lezen gegevens die beschikbaar moeten zijn op alle knooppunten, terwijl accumulatoren kunnen worden gebruikt om reducties in een imperatieve stijl te programmeren.,
een typisch voorbeeld van RDD-centric functioneel programmeren is het volgende Scala programma dat de frequenties berekent van alle woorden die voorkomen in een set tekstbestanden en de meest voorkomende afdrukt. Elke map, flatMap (een variant van map) en reduceByKey neemt een anonieme functie die een eenvoudige bewerking uitvoert op een enkel gegevensitem (of een paar items), en past zijn argument toe om een RDD om te zetten in een nieuwe RDD.,
Spark Sqledit
Spark SQL is een component bovenop Spark Core die een data abstractie genaamd DataFrames introduceerde, die ondersteuning biedt voor gestructureerde en semi-gestructureerde data. Spark SQL biedt een domeinspecifieke taal (DSL) om dataframes te manipuleren in Scala, Java, Python of .NET. het biedt ook SQL taalondersteuning, met command-line interfaces en ODBC/JDBC server. Hoewel DataFrames de compilatietijd type-controle door RDDs missen, wordt vanaf Spark 2.0 de sterk getypte DataSet ook volledig ondersteund door Spark SQL.,
Spark StreamingEdit
Spark Streaming maakt gebruik van Spark Core ‘ S snelle scheduling mogelijkheid om streaming analytics uit te voeren. Het neemt gegevens in mini-batches en voert RDD transformaties op die mini-batches van gegevens. Dit ontwerp maakt het mogelijk om dezelfde set van applicatie code geschreven voor batch analytics te gebruiken in streaming analytics, waardoor eenvoudige implementatie van lambda architectuur. Echter, dit gemak wordt geleverd met de straf van latentie gelijk aan de mini-batch duur., Andere streaming data engines die event per event verwerken in plaats van in mini-batches zijn Storm en de streaming component van Flink. Spark Streaming heeft ondersteuning ingebouwd om te consumeren van Kafka, Flume, Twitter, ZeroMQ, Kinesis en TCP/IP sockets.
in Vonk 2.x, een aparte technologie op basis van Datasets, genaamd gestructureerde Streaming, die een interface op een hoger niveau heeft, wordt ook geleverd om streaming te ondersteunen.
Spark kan zowel in een traditioneel on-premise datacenter als in de cloud worden ingezet.,
MLlib Machine Learning LibraryEdit
Spark MLlib is een gedistribueerd machine-learning framework bovenop Spark Core dat, grotendeels te wijten aan de gedistribueerde geheugen-gebaseerde Spark architectuur, is zo veel als negen keer zo snel als de disk-gebaseerde implementatie gebruikt door Apache Mahout (volgens benchmarks gedaan door de MLlib ontwikkelaars tegen de alternating least squares (ALS) implementaties, en voordat Mahout zelf kreeg een Spark interface), en schaalt beter dan Vowpal Wabbit., Verloop-Versterkt Boom
GraphXEdit
GraphX is een gedistribueerd grafiek-processing framework op de top van Apache Vonk., Omdat het is gebaseerd op RDDs, die onveranderlijk zijn, grafieken zijn onveranderlijk en dus GraphX is ongeschikt voor grafieken die moeten worden bijgewerkt, laat staan op een transactionele manier zoals een grafiek database. GraphX biedt twee aparte API ‘ s voor de implementatie van massaal parallelle algoritmen (zoals PageRank): een Pregel abstraction, en een meer algemene MapReduce-stijl API. In tegenstelling tot zijn voorganger Bagel, die formeel werd afgekeurd in Spark 1.6, GraphX heeft volledige ondersteuning voor eigenschap grafieken (grafieken waar eigenschappen kunnen worden bevestigd aan randen en hoekpunten).,
GraphX kan gezien worden als de Spark in-memory versie van Apache Giraph, die Hadoop disk-based MapReduce gebruikte.net als Apache Spark begon GraphX aanvankelijk als een onderzoeksproject bij UC Berkeley ‘ s AMPLab en Databricks, en werd later gedoneerd aan de Apache Software Foundation en het Spark project.
Leave a Reply