Apache Spark har sin arkitektoniska grund i den fjädrande distribuerade datauppsättningen (RDD), en skrivskyddad multiset av dataobjekt fördelade över ett kluster av maskiner, som upprätthålls på ett feltolerant sätt. Dataframe API släpptes som en abstraktion ovanpå rdd, följt av dataset API. I Gnista 1.x, RDD var det primära programmeringsgränssnittet (API), men från och med Spark 2.x användning av dataset API uppmuntras även om RDD API inte är föråldrad. Rdd-tekniken ligger fortfarande till grund för Dataset API.,
Spark och dess rdd utvecklades 2012 som svar på begränsningar i MapReduce cluster computing paradigm, vilket tvingar en viss linjär dataflödesstruktur på distribuerade program: MapReduce program Läs indata från disk, kartlägga en funktion över data, minska resultaten av kartan och lagra reduktionsresultat på disk. Spark s RDDs fungerar som en arbetsuppsättning för distribuerade program som erbjuder en (medvetet) begränsad form av distribuerat delat minne.,
Spark underlättar implementeringen av båda iterativa algoritmer, som besöker sin datauppsättning flera gånger i en slinga, och interaktiv/utforskande dataanalys, dvs upprepad databas-stil querying av data. Latensen hos sådana applikationer kan minskas med flera storleksordningar jämfört med Apache Hadoop MapReduce-genomförandet.Bland klassen av iterativa algoritmer är träningsalgoritmerna för maskininlärningssystem, vilket bildade den första drivkraften för att utveckla Apache Spark.
Apache Spark kräver en klusterhanterare och ett distribuerat lagringssystem., För klusterhantering stöder Spark fristående (native Spark cluster, där du kan starta ett kluster antingen manuellt eller använda startskripten som tillhandahålls av installationspaketet. Det är också möjligt att köra dessa daemons på en enda maskin för testning), Hadoop garn, Apache Mesos eller Kubernetes. För distribuerad lagring, Gnista, som kan samverka med ett brett utbud, bland annat Alluxio, Hadoop (Distributed File System HDFS), MapR File System (MapR-FS), Cassandra, Internationaliserad Swift, Amazon S3, Kudu, Lyster filsystem, eller en anpassad lösning kan genomföras., Spark stöder också ett pseudo-distribuerat lokalt läge, som vanligtvis endast används för utvecklings-eller teständamål, där distribuerad lagring inte krävs och det lokala filsystemet kan användas istället.i ett sådant scenario körs Spark på en enda maskin med en exekutör per CPU-kärna.
Spark CoreEdit
Spark Core är grunden för det övergripande projektet. Det ger distribuerad uppgift avsändning, schemaläggning och grundläggande I/O-funktioner, exponeras genom ett programprogrammeringsgränssnitt (för Java, Python, Scala, .,NET och R) centrerad på rdd-abstraktionen (Java API är tillgängligt för andra JVM-språk, men är också användbart för vissa andra icke-JVM-språk som kan ansluta till JVM, som Julia). Detta gränssnitt speglar en funktionell / högre ordningsmodell för programmering: ett ”drivrutinsprogram” åberopar parallella operationer som karta, filter eller minska på en RDD genom att skicka en funktion till gnista, som sedan schemalägger funktionen utförande parallellt på klustret. Dessa operationer, och ytterligare sådana som sammanfogar, tar rdd som ingång och producerar nya rdd., Rdd är oföränderliga och deras verksamhet är lat; feltolerans uppnås genom att hålla reda på ”lineage” för varje RDD (sekvensen av operationer som producerade den) så att den kan rekonstrueras vid dataförlust. RDDs kan innehålla alla typer av Python .NET, Java, eller Scala objekt.
förutom rdd-orienterade funktionell stil av programmering, ger Spark två begränsade former av delade variabler: broadcast variabler referens skrivskyddade data som måste vara tillgängliga på alla noder, medan ackumulatorer kan användas för att programmera minskningar i en imperativ stil.,
ett typiskt exempel på rdd-centrerad funktionell programmering är följande Scala-program som beräknar frekvenserna för alla ord som förekommer i en uppsättning textfiler och skriver ut de vanligaste. Varje karta, flatMap (en variant av karta) och reduceByKey tar en anonym funktion som utför en enkel operation på ett enda dataobjekt (eller ett par objekt), och tillämpar sitt argument för att omvandla en RDD till en ny RDD.,
Spark SQLEdit
Spark SQL är en komponent ovanpå Gnistkärna som introducerade en dataabstraktion som heter DataFrames, vilket ger stöd för strukturerad och halvstrukturerad data. Spark SQL ger ett domänspecifikt språk (DSL) för att manipulera DataFrames i Scala, Java, Python eller .NET. det ger också SQL Språkstöd, med kommandoradsgränssnitt och ODBC/JDBC server. Även om DataFrames saknar kompileringstypkontroll som rdd: er ger, Från och med Spark 2.0, stöds den starkt skrivna datauppsättningen också fullt ut av Spark SQL.,
Spark StreamingEdit
Spark Streaming använder Spark Core snabb schemaläggning förmåga att utföra strömmande analytics. Det intar data i mini-satser och utför rdd-omvandlingar på dessa mini-satser av data. Denna design gör det möjligt för samma uppsättning applikationskod som skrivits för batchanalys att användas i streaming analytics, vilket underlättar enkel implementering av lambda-arkitektur. Denna bekvämlighet kommer dock med straffet för latens som är lika med mini-batch-varaktigheten., Andra strömmande datamotorer som behandlar händelse av händelse snarare än i mini-satser inkluderar Storm och strömmande komponenten i Flink. Gnista Streaming har stöd inbyggt för att konsumera från Kafka, Vattenränna, Twitter, ZeroMQ, Kinesis, och TCP/IP sockets.
I Spark 2.x, en separat teknik baserad på datauppsättningar, kallad strukturerad Streaming, som har en högre nivå gränssnitt tillhandahålls också för att stödja streaming.
gnista kan distribueras i ett traditionellt datacenter på plats såväl som i molnet.,
Mllib maskininlärning LibraryEdit
Spark Mllib är en distribuerad maskininlärningsram ovanpå Gnistkärna som till stor del beror på den distribuerade minnesbaserade Spark-arkitekturen, är så mycket som nio gånger så snabbt som den diskbaserade implementeringen som används av Apache Mahout (enligt riktmärken som gjorts av mllib-utvecklarna mot de alternerande minsta kvadraterna (ALS) – implementeringarna, och innan Mahout själv fick ett Gnistgränssnitt) och vågar bättre än Vowpal Wabbit., Lutning Uppsving för Träd
GraphXEdit
GraphX är en distribuerad graf-bearbetning ram på toppen av Apache Gnista., Eftersom det är baserat på rdd, som är oföränderliga, grafer är oföränderliga och därmed GraphX är olämpligt för grafer som behöver uppdateras, än mindre på ett transaktionellt sätt som en graf databas. GraphX tillhandahåller två separata API: er för implementering av massivt parallella algoritmer (som PageRank): en Pregel abstraktion och ett mer allmänt MapReduce-stil API. Till skillnad från sin föregångare Bagel, som formellt deprecated i Spark 1.6, har GraphX fullt stöd för fastighetsgrafer (grafer där egenskaper kan fästas på kanter och hörn).,
GraphX kan ses som den Gnista i minnet version av Apache Giraph, som utnyttjas för Hadoop disk-baserade MapReduce.
Som Apache Gnista, GraphX ursprungligen började som ett forskningsprojekt vid UC Berkeley ’ s AMPLab och Databricks, och senare donerade till Apache Software Foundation och Spark-projektet.
Leave a Reply