Apache Spark defined
Apache Spark verpletterde is een data processing framework dat snel verwerkingstaken kan uitvoeren op zeer grote datasets, en dataverwerkingstaken ook kan distribueren over meerdere computers, alleen of in combinatie met andere gedistribueerde computing tools. Deze twee kwaliteiten zijn de sleutel tot de werelden van big data en machine learning, die het verzamelen van enorme rekenkracht vereisen om te crunchen door middel van grote data stores., Spark neemt ook een deel van de programmering lasten van deze taken van de schouders van ontwikkelaars met een eenvoudig te gebruiken API die abstraheert weg veel van de grunt werk van gedistribueerde computing en big data-verwerking.vanaf het bescheiden begin in het AMPLab op U. C. Berkeley in 2009, is Apache Spark uitgegroeid tot een van de belangrijkste big data distributed processing frameworks in de wereld. Spark kan op verschillende manieren worden ingezet, biedt native bindingen voor de programmeertalen Java, Scala, Python en R, en ondersteunt SQL, streaming data, machine learning en grafiekverwerking., Je vindt het gebruikt door banken, telecommunicatiebedrijven, games bedrijven, overheden, en alle van de grote tech reuzen zoals Apple, Facebook, IBM, en Microsoft.
Apache Spark-architectuur
op een fundamenteel niveau bestaat een Apache Spark-toepassing uit twee hoofdcomponenten: een driver, die de code van de gebruiker omzet in meerdere taken die over arbeidersknooppunten kunnen worden verdeeld, en uitvoerders, die op die knooppunten draaien en de toegewezen taken uitvoeren. Een of andere vorm van Clustermanager is nodig om tussen de twee te bemiddelen.,
Out of the box, Spark kan draaien in een standalone cluster modus die gewoon het Apache Spark framework en een JVM op elke machine in uw cluster vereist. Het is echter waarschijnlijker dat u gebruik wilt maken van een robuuster resource-of clusterbeheersysteem om te zorgen voor de toewijzing van werknemers op aanvraag voor u. In de enterprise, dit zal normaal betekenen dat op Hadoop garen (dit is hoe de Cloudera en Hortonworks distributies draaien Spark banen), maar Apache Spark kan ook draaien op Apache Mesos, Kubernetes, en Docker zwerm.,
Als u een beheerde oplossing zoekt, dan kan Apache Spark worden gevonden Als onderdeel van Amazon EMR, Google Cloud Dataproc en Microsoft Azure HDInsight. Databricks, het bedrijf dat de oprichters van Apache Spark in dienst, biedt ook de Databricks Unified Analytics Platform, dat is een uitgebreide managed service die Apache Spark clusters biedt, streaming ondersteuning, geà ntegreerde web-based notebook ontwikkeling, en geoptimaliseerde cloud I / O-prestaties over een standaard Apache Spark distributie.
Apache Spark bouwt de data processing commando ‘ s van de gebruiker in een gerichte acyclische grafiek, of DAG., De DAG is Apache Spark ‘ s scheduling laag; het bepaalt welke taken worden uitgevoerd op welke knooppunten en in welke volgorde.
Spark vs. Hadoop: waarom Apache Spark gebruiken?
Het is de moeite waard erop te wijzen dat Apache Spark vs.Apache Hadoop een beetje een verkeerde benaming is. U vindt Spark opgenomen in de meeste Hadoop distributies deze dagen. Maar als gevolg van twee grote voordelen, Spark is uitgegroeid tot het raamwerk van de keuze bij het verwerken van big data, inhalen van de oude MapReduce paradigma dat Hadoop naar bekendheid gebracht.
het eerste voordeel is snelheid., Spark ‘ s in-memory data engine betekent dat het taken kan uitvoeren tot honderd keer sneller dan MapReduce in bepaalde situaties, in het bijzonder in vergelijking met multi-stage banen die het schrijven van de staat nodig terug naar de schijf tussen fasen. In essentie, MapReduce creëert een tweetraps uitvoering grafiek bestaande uit data mapping en het verminderen, terwijl Apache Spark DAG heeft meerdere fasen die efficiënter kunnen worden gedistribueerd. Zelfs Apache Spark banen waar de gegevens niet volledig kunnen worden opgenomen in het geheugen hebben de neiging om ongeveer 10 keer sneller dan hun MapReduce tegenhanger.,
het tweede voordeel is de Ontwikkelaarvriendelijke Spark API. Zo belangrijk als Spark ‘ s speedup is, zou men kunnen stellen dat de vriendelijkheid van de Spark API is nog belangrijker.
Spark Core
in vergelijking met MapReduce en andere Apache Hadoop componenten, is de Apache Spark API zeer vriendelijk voor ontwikkelaars, waardoor veel van de complexiteit van een gedistribueerde processing engine achter eenvoudige methode calls wordt verborgen., Het canonieke voorbeeld hiervan is hoe bijna 50 regels MapReduce code om woorden te tellen in een document kunnen worden gereduceerd tot slechts een paar regels Apache Spark (hier getoond in Scala):
door het verstrekken van bindingen naar populaire talen voor data-analyse zoals Python en R, evenals de meer enterprise-vriendelijke Java en Scala, Apache Spark stelt iedereen van applicatie ontwikkelaars tot data wetenschappers in staat om de schaalbaarheid en snelheid op een toegankelijke manier te benutten.,
Spark RDD
het hart van Apache Spark is het concept van de veerkrachtige gedistribueerde Dataset (RDD), een programmeerabstractie die een onveranderlijke verzameling objecten vertegenwoordigt die over een computercluster kunnen worden gesplitst. Bewerkingen op de RDDs kunnen ook over het cluster worden gesplitst en in een parallel batchproces worden uitgevoerd, wat leidt tot een snelle en schaalbare parallelle verwerking.
RDDs kunnen worden gemaakt van eenvoudige tekstbestanden, SQL databases, NoSQL stores (zoals Cassandra en MongoDB), Amazon S3 buckets, en nog veel meer., Een groot deel van de Spark Core API is gebouwd op dit RDD-concept, waardoor traditionele kaart en vermindering van functionaliteit, maar ook het verstrekken van ingebouwde ondersteuning voor het aansluiten van datasets, filtering, sampling, en aggregatie.
Spark draait op een gedistribueerde manier door een driver core proces te combineren dat een Spark toepassing splitst in taken en deze distribueert over vele uitvoerprocessen die het werk doen. Deze uitvoerders kunnen omhoog en omlaag worden geschaald zoals vereist voor de behoeften van de toepassing.,
Spark SQL
oorspronkelijk bekend als Shark, Spark SQL is steeds belangrijker geworden voor het Apache Spark project. Het is waarschijnlijk de interface die het meest wordt gebruikt door de ontwikkelaars van vandaag bij het maken van toepassingen. Spark SQL is gericht op de verwerking van gestructureerde gegevens, met behulp van een dataframe aanpak geleend van R en Python (in Panda ‘ s). Maar zoals de naam al doet vermoeden, Spark SQL biedt ook een sql2003-compatibele interface voor het opvragen van gegevens, waardoor de kracht van Apache Spark analisten en ontwikkelaars.,
naast standaard SQL-ondersteuning biedt Spark SQL een standaard interface voor het lezen van en schrijven naar andere datastores, waaronder JSON, HDFS, Apache Hive, JDBC, Apache ORC en Apache Parquet, die allemaal out of the box worden ondersteund. Andere populaire winkels-Apache Cassandra, MongoDB, Apache HBase, en vele anderen-kunnen worden gebruikt door het aantrekken van afzonderlijke aansluitingen van de Spark pakketten ecosysteem.,
het selecteren van enkele kolommen uit een dataframe is zo eenvoudig als deze regel:
citiesDF.select("name”, "pop”)
met behulp van de SQL-interface registreren we het dataframe als een tijdelijke tabel, waarna we er SQL queries tegen kunnen geven:
citiesDF.createOrReplaceTempView("cities”)
spark.sql("SELECT name, pop FROM cities”)
achter de schermen gebruikt Apache Spark een query optimizer genaamd Catalyst die gegevens en query ‘ s onderzoekt om een efficiënte query plan voor data lokaliteit en berekening die de vereiste berekeningen over het cluster zal uitvoeren produceren. In de Apache Spark 2.,x era, De Spark SQL interface van dataframes en datasets (in wezen een getypte dataframe die kan worden gecontroleerd tijdens het compileren op juistheid en profiteren van verdere geheugen en berekenen optimalisaties tijdens runtime) is de aanbevolen aanpak voor ontwikkeling. De RDD-interface is nog steeds beschikbaar, maar wordt alleen aanbevolen als uw behoeften niet kunnen worden aangepakt binnen de Spark SQL paradigma.
Spark 2.4 introduceerde een set van ingebouwde hogere-orde functies voor het direct manipuleren van arrays en andere hogere-orde data types.,
Spark MLlib
Apache Spark bundelt ook bibliotheken voor het toepassen van machine learning en grafiekanalysetechnieken op gegevens op schaal. Spark MLlib bevat een kader voor het creëren van machine learning pijpleidingen, waardoor eenvoudige implementatie van functie extractie, selecties en transformaties op een gestructureerde dataset. MLlib wordt geleverd met gedistribueerde implementaties van clustering-en classificatiealgoritmen zoals k-means clustering en random forests die gemakkelijk kunnen worden verwisseld in en uit aangepaste pijpleidingen., Modellen kunnen worden getraind door data wetenschappers in Apache Spark met behulp van R of Python, opgeslagen met behulp van MLlib, en vervolgens geïmporteerd in een Java-gebaseerde of Scala-gebaseerde pijplijn voor productie gebruik.
merk op dat Spark MLlib weliswaar basisleermachine-leren omvat, inclusief classificatie, regressie, clustering en filtering, maar geen faciliteiten omvat voor het modelleren en trainen van diepe neurale netwerken (voor details zie InfoWorld ‘ s Spark MLlib review). Echter, Deep Learning pijpleidingen zijn in de maak.,
Spark GraphX
Spark GraphX wordt geleverd met een selectie van gedistribueerde algoritmen voor het verwerken van grafiekstructuren, waaronder een implementatie van Google ‘ s PageRank. Deze algoritmen gebruiken Spark Core ‘ S RDD benadering van het modelleren van gegevens; de GraphFrames pakket kunt u Grafiek operaties op dataframes doen, met inbegrip van het gebruik van de Catalyst optimizer voor Grafiek queries.
Spark Streaming
Spark Streaming was een vroege toevoeging aan Apache Spark die het hielp om tractie te krijgen in omgevingen die real-time of bijna real-time verwerking nodig hadden., Voorheen, batch en stream verwerking in de wereld van Apache Hadoop waren aparte dingen. U zou MapReduce code schrijven voor uw batch verwerking behoeften en gebruik iets als Apache Storm voor uw real-time streaming eisen. Dit leidt uiteraard tot uiteenlopende codebases die gesynchroniseerd moeten worden gehouden voor het toepassingsdomein, ondanks het feit dat ze gebaseerd zijn op volledig verschillende frameworks, waarbij verschillende resources nodig zijn en waarbij verschillende operationele zorgen nodig zijn om ze uit te voeren.,
Spark Streaming breidde het Apache Spark concept van batchverwerking uit tot streaming door de stream op te splitsen in een continue reeks microbatches, die vervolgens konden worden gemanipuleerd met behulp van de Apache Spark API. Op deze manier kan code in batch-en streaming-bewerkingen (meestal) dezelfde code delen, die op hetzelfde framework draait, waardoor zowel Ontwikkelaar als operator overhead wordt verminderd. Iedereen wint.,
een kritiek op de Spark Streaming aanpak is dat microbatching, in scenario ‘ s waar een low-latency respons op inkomende data vereist is, mogelijk niet in staat is om de prestaties van andere streaming-geschikte frameworks zoals Apache Storm, Apache Flink en Apache Apex te evenaren, die allemaal een pure streaming methode gebruiken in plaats van microbatches.
gestructureerde Streaming
gestructureerde Streaming (toegevoegd in Spark 2.x) is om vonk Streaming wat Spark SQL was om de Spark Core API ‘ s: een hoger niveau API en eenvoudiger abstractie voor het schrijven van toepassingen., In het geval van Structure Streaming, de hogere-level API in wezen stelt ontwikkelaars in staat om oneindige streaming dataframes en datasets te creëren. Het lost ook een aantal zeer reële pijnpunten die gebruikers hebben geworsteld met in het eerdere kader, met name met betrekking tot het omgaan met gebeurtenis-tijd aggregaties en late levering van berichten. Alle query ’s op gestructureerde streams gaan door de Catalyst query optimizer en kunnen zelfs op een interactieve manier worden uitgevoerd, zodat gebruikers SQL-query’ s kunnen uitvoeren tegen live streaming-gegevens.,
gestructureerde Streaming vertrouwde oorspronkelijk op Spark Streaming ‘ s microbatching schema voor het omgaan met streaming data. Maar in Spark 2.3, De Apache Spark team voegde een low-latency continue Processing Mode aan gestructureerde Streaming, waardoor het omgaan met reacties met latenties zo laag als 1ms, dat is zeer indrukwekkend. Vanaf Spark 2.4 wordt continue verwerking nog steeds als experimenteel beschouwd. Terwijl gestructureerde Streaming is gebouwd op de top van de Spark SQL engine, continue Streaming ondersteunt slechts een beperkte set van vragen.,
Structured Streaming is de toekomst van streamingtoepassingen met het platform, dus als je een nieuwe streamingtoepassing bouwt, moet je gestructureerde Streaming gebruiken. De legacy Spark Streaming API ‘ s zal blijven worden ondersteund, maar het project beveelt over te dragen naar gestructureerde Streaming, als de nieuwe methode maakt het schrijven en onderhouden van streaming code een stuk draaglijker.
Deep Learning pijpleidingen
Apache Spark ondersteunt deep learning via Deep Learning pijpleidingen., Met behulp van de bestaande pijplijn structuur van MLlib, kunt u bellen naar lagere niveau deep learning bibliotheken en construeren classifiers in slechts een paar regels code, evenals aangepaste TensorFlow grafieken of Keras modellen toe te passen op inkomende gegevens. Deze grafieken en modellen kunnen zelfs worden geregistreerd als aangepaste Spark SQL UDFs (user-defined functions), zodat de deep learning modellen kunnen worden toegepast op gegevens als onderdeel van SQL statements.
Apache Spark tutorials
klaar om Apache Spark te leren?, We raden Evan Heitman ’s a Neanderthaler’ s Guide to Apache Spark in Python, die niet alleen de basis legt van hoe Apache Spark werkt in relatief eenvoudige termen, maar ook begeleidt u door het proces van het schrijven van een eenvoudige Python applicatie die gebruik maakt van het kader. Het artikel is geschreven vanuit het perspectief van een data scientist, wat logisch is omdat data science een wereld is waarin big data en machine learning steeds kritischer worden.,
als je op zoek bent naar enkele Apache Spark voorbeelden om je een idee te geven van wat het platform kan doen en hoe het het doet, check Spark By {Examples}. Er is tal van voorbeeld code hier voor een aantal van de fundamentele taken die deel uitmaken van de bouwstenen van Spark programmering, zodat u kunt zien de componenten die deel uitmaken van de grotere taken die Apache Spark is gemaakt voor.
wilt u dieper gaan? DZone heeft wat het bescheiden verwijst naar als de Complete Apache Spark collectie, die bestaat uit een hoop handige tutorials over veel Apache Spark onderwerpen. Gelukkig leren!