Programmering

Hva er Apache Spark? Den store dataplattformen som knuste Hadoop

Apache Spark definert

Apache Spark er et databehandlingsrammeverk som raskt kan utføre behandlingsoppgaver på veldig store datasett, og som også kan distribuere databehandlingsoppgaver over flere datamaskiner, enten alene eller sammen med andre distribuerte databehandlingsverktøy. Disse to egenskapene er nøkkelen til verdenene av big data og maskinlæring, noe som krever samlingen av massiv datakraft for å knuse gjennom store datalagre. Spark tar også noen av programmeringsbyrdene til disse oppgavene fra utviklerens skuldre med et brukervennlig API som trekker bort mye av gruntarbeidet med distribuert databehandling og stor databehandling.

Fra sin ydmyke begynnelse i AMPLab i U.C. Berkeley i 2009, Apache Spark har blitt en av de viktigste rammeverkene for distribusjon av store data i verden. Gnist kan distribueres på en rekke måter, gir innfødte bindinger for programmeringsspråkene Java, Scala, Python og R, og støtter SQL, streaming av data, maskinlæring og grafbehandling. Du finner den brukt av banker, telekommunikasjonsselskaper, spillbedrifter, myndigheter, og alle de store teknologigigantene som Apple, Facebook, IBM og Microsoft.

Apache Spark-arkitektur

På et grunnleggende nivå består en Apache Spark-applikasjon av to hovedkomponenter: a sjåfør, som konverterer brukerens kode til flere oppgaver som kan distribueres over arbeidernoder, og eksekutører, som kjører på disse nodene og utfører oppgavene som er tildelt dem. En eller annen form for klyngebehandler er nødvendig for å megle mellom de to.

Utenfor boksen kan Spark kjøre i en frittstående klyngemodus som bare krever Apache Spark-rammeverket og en JVM på hver maskin i klyngen din. Det er imidlertid mer sannsynlig at du vil dra nytte av et mer robust ressurs- eller klyngeadministrasjonssystem for å ta seg av tildeling av arbeidere etter behov. I bedriften vil dette normalt bety å kjøre på Hadoop YARN (dette er hvordan Cloudera og Hortonworks-distribusjonene kjører Spark-jobber), men Apache Spark kan også kjøre på Apache Mesos, Kubernetes og Docker Swarm.

Hvis du søker en administrert løsning, kan Apache Spark bli funnet som en del av Amazon EMR, Google Cloud Dataproc og Microsoft Azure HDInsight. Databricks, selskapet som ansetter grunnleggerne av Apache Spark, tilbyr også Databricks Unified Analytics Platform, som er en omfattende administrert tjeneste som tilbyr Apache Spark-klynger, streaming-støtte, integrert nettbasert utvikling av notisbok og optimalisert sky I / O-ytelse over en standard Apache Spark-distribusjon.

Apache Spark bygger brukerens kommandoer for databehandling til en Regissert syklisk grafeller DAG. DAG er Apache Sparks planleggingslag; den bestemmer hvilke oppgaver som utføres på hvilke noder og i hvilken rekkefølge.

Spark vs. Hadoop: Hvorfor bruke Apache Spark?

Det er verdt å påpeke at Apache Spark vs. Apache Hadoop er litt feil. Du finner Spark inkludert i de fleste Hadoop-distribusjonene i disse dager. Men på grunn av to store fordeler, har Spark blitt rammen for valg når man behandler stordata, og forbikjør det gamle MapReduce-paradigmet som førte Hadoop til fremtredende.

Den første fordelen er hastighet. Sparks datamotor i minnet betyr at den kan utføre oppgaver opptil hundre ganger raskere enn MapReduce i visse situasjoner, spesielt sammenlignet med flertrinsjobber som krever skriving av tilstand tilbake til disk mellom trinn. Kort sagt, MapReduce oppretter en to-trinns utførelsesgraf som består av datakartlegging og reduksjon, mens Apache Sparks DAG har flere trinn som kan distribueres mer effektivt. Selv Apache Spark-jobber der dataene ikke kan være fullstendig inneholdt i minnet, pleier å være rundt 10 ganger raskere enn MapReduce-motstykket.

Den andre fordelen er den utviklervennlige Spark API. Like viktig som Sparks speedup er, kan man hevde at vennligheten til Spark API er enda viktigere.

Gnistkjerne

Sammenlignet med MapReduce og andre Apache Hadoop-komponenter, er Apache Spark API veldig vennlig for utviklere, og gjemmer mye av kompleksiteten til en distribuert behandlingsmotor bak enkle metodesamtaler. Det kanoniske eksemplet på dette er hvordan nesten 50 linjer MapReduce-kode for å telle ord i et dokument kan reduseres til bare noen få linjer Apache Spark (her vist i Scala):

val textFile = sparkSession.sparkContext.textFile (“hdfs: /// tmp / ord”)

val counts = textFile.flatMap (line => line.split (““))

.kart (ord => (ord, 1))

.reduceByKey (_ + _)

teller.saveAsTextFile (“hdfs: /// tmp / words_agg”)

Ved å tilby bindinger til populære språk for dataanalyse som Python og R, samt det mer bedriftsvennlige Java og Scala, lar Apache Spark alle, fra applikasjonsutviklere til dataforskere, utnytte skalerbarheten og hastigheten på en tilgjengelig måte.

Gnist RDD

I hjertet av Apache Spark er konseptet til Resilient Distributed Dataset (RDD), en programmeringsabstraksjon som representerer en uforanderlig samling objekter som kan deles over en databehandlingsklynge. Operasjoner på RDDene kan også deles over klyngen og utføres i en parallell batch-prosess, noe som fører til rask og skalerbar parallellbehandling.

RDD kan opprettes fra enkle tekstfiler, SQL-databaser, NoSQL-butikker (for eksempel Cassandra og MongoDB), Amazon S3-bøtter og mye mer i tillegg. Mye av Spark Core API er bygget på dette RDD-konseptet, som muliggjør tradisjonelt kart og reduserer funksjonalitet, men gir også innebygd støtte for å bli med datasett, filtrering, prøvetaking og aggregering.

Spark løper distribuert ved å kombinere en sjåfør kjerneprosess som deler en Spark-applikasjon i oppgaver og distribuerer dem blant mange utfører prosesser som gjør jobben. Disse eksekutørene kan skaleres opp og ned etter behov for applikasjonens behov.

Gnist SQL

Opprinnelig kjent som Shark, har Spark SQL blitt mer og mer viktig for Apache Spark-prosjektet. Det er sannsynligvis det grensesnittet som ofte brukes av dagens utviklere når de lager applikasjoner. Spark SQL er fokusert på behandling av strukturerte data, ved hjelp av en dataramme-tilnærming lånt fra R og Python (i Pandas). Men som navnet antyder, gir Spark SQL også et SQL2003-kompatibelt grensesnitt for spørring av data, noe som gir kraften til Apache Spark til både analytikere og utviklere.

I tillegg til standard SQL-støtte, gir Spark SQL et standard grensesnitt for lesing fra og skriving til andre datalagre, inkludert JSON, HDFS, Apache Hive, JDBC, Apache ORC og Apache Parquet, som alle støttes ut av esken. Andre populære butikker - Apache Cassandra, MongoDB, Apache HBase og mange andre - kan brukes ved å trekke i separate kontakter fra Spark Packages-økosystemet.

Å velge noen kolonner fra en dataramme er så enkelt som denne linjen:

townsDF.select (“navn”, “pop”)

Ved hjelp av SQL-grensesnittet registrerer vi datarammen som en midlertidig tabell, hvoretter vi kan utstede SQL-spørsmål mot den:

citiesDF.createOrReplaceTempView (“byer”)

spark.sql (“VELG navn, pop FRA byer”)

Bak kulissene bruker Apache Spark en spørringsoptimerer kalt Catalyst som undersøker data og spørsmål for å produsere en effektiv spørringsplan for datalokalitet og beregning som vil utføre de nødvendige beregningene over hele klyngen. I Apache Spark 2.x-tiden er Spark SQL-grensesnittet for datarammer og datasett (i hovedsak en maskinskrevet dataramme som kan kontrolleres ved kompileringstid for korrekthet og dra nytte av ytterligere minne og beregningsoptimaliseringer på kjøretid). . RDD-grensesnittet er fremdeles tilgjengelig, men anbefales bare hvis dine behov ikke kan imøtekommes innen Spark SQL-paradigmet.

Spark 2.4 introduserte et sett med innebygde funksjoner med høyere ordre for å manipulere matriser og andre høyere ordensdatatyper direkte.

Spark MLlib

Apache Spark samler også biblioteker for bruk av maskinlæring og grafanalyseteknikker til data i stor skala. Spark MLlib inneholder et rammeverk for å opprette maskinlæringsrørledninger, som muliggjør enkel implementering av funksjonsutvinning, valg og transformasjoner i ethvert strukturert datasett. MLlib leveres med distribuerte implementeringer av klynging og klassifiseringsalgoritmer som k-betyr klynging og tilfeldige skoger som enkelt kan byttes inn og ut av tilpassede rørledninger. Modeller kan trenes av dataforskere i Apache Spark ved bruk av R eller Python, lagres ved hjelp av MLlib, og deretter importeres til en Java-basert eller Scala-basert rørledning for produksjonsbruk.

Vær oppmerksom på at mens Spark MLlib dekker grunnleggende maskinlæring inkludert klassifisering, regresjon, klynging og filtrering, inkluderer den ikke fasiliteter for modellering og opplæring av dype nevrale nettverk (for detaljer se Spark MLlib-gjennomgang). Imidlertid er Deep Learning Pipelines i ferd.

Spark GraphX

Spark GraphX ​​kommer med et utvalg distribuerte algoritmer for behandling av grafstrukturer, inkludert implementering av Googles PageRank. Disse algoritmene bruker Spark Core's RDD-tilnærming til modellering av data; GraphFrames-pakken lar deg utføre grafoperasjoner på datarammer, inkludert å dra nytte av Catalyst optimizer for grafspørsmål.

Spark Streaming

Spark Streaming var et tidlig tillegg til Apache Spark som hjalp det med å få grep i miljøer som krevde sanntid eller nær sanntidsbehandling. Tidligere var batch- og strømbehandling i Apache Hadoop-verdenen separate ting. Du vil skrive MapReduce-kode for dine batchbehandlingsbehov og bruke noe som Apache Storm for dine strømmekrav i sanntid. Dette fører åpenbart til ulike kodebaser som må holdes synkronisert for applikasjonsdomenet, til tross for at de er basert på helt andre rammer, som krever forskjellige ressurser og involverer forskjellige operasjonelle bekymringer for å kjøre dem.

Spark Streaming utvidet Apache Spark-konseptet med batchbehandling til streaming ved å bryte strømmen ned i en kontinuerlig serie mikrobatcher, som deretter kunne manipuleres ved hjelp av Apache Spark API. På denne måten kan kode i batch- og streaming-operasjoner dele (for det meste) den samme koden og kjøre på samme rammeverk, og dermed redusere både utvikler- og operatørkostnader. Alle vinner.

En kritikk av Spark Streaming-tilnærmingen er at mikrobatching, i scenarier der det kreves en lav latensrespons på innkommende data, kanskje ikke kan matche ytelsen til andre streaming-kompatible rammer som Apache Storm, Apache Flink og Apache Apex, som alle bruker en ren streamingmetode i stedet for mikrobatcher.

Strukturert streaming

Strukturert streaming (lagt til i Spark 2.x) er å Spark Streaming hva Spark SQL var for Spark Core API-ene: Et API på høyere nivå og lettere abstraksjon for å skrive applikasjoner. Når det gjelder strukturstrømning, gir API-et på høyere nivå i hovedsak utviklere muligheten til å lage uendelige datastrammer og datasett for streaming. Det løser også noen veldig virkelige smertepunkter som brukere har slitt med i tidligere rammeverk, spesielt når det gjelder håndtering av hendelsestidssammenstillinger og sen levering av meldinger. Alle spørsmål på strukturerte strømmer går gjennom Catalyst spørringsoptimerer, og kan til og med kjøres på en interaktiv måte, slik at brukerne kan utføre SQL-spørringer mot direktesendingsdata.

Structured Streaming stolte opprinnelig på Spark Streamings microbatching-ordning for håndtering av streamingdata. Men i Spark 2.3 la Apache Spark-teamet til en kontinuerlig prosesseringsmodus med lav latens i strukturert streaming, slik at den kunne håndtere svar med ventetid så lave som 1 ms, noe som er veldig imponerende. Fra og med Spark 2.4, anses kontinuerlig prosessering fortsatt som eksperimentell. Mens Structured Streaming er bygget på toppen av Spark SQL-motoren, støtter kontinuerlig streaming bare et begrenset sett med spørsmål.

Strukturert streaming er fremtiden for streaming-applikasjoner med plattformen, så hvis du bygger et nytt streaming-program, bør du bruke Structured Streaming. De eldre API-ene for Spark Streaming vil fortsatt støttes, men prosjektet anbefaler at du overfører til Structured Streaming, siden den nye metoden gjør skriving og vedlikehold av streamingkode mye mer utholdelig.

Deep Learning Pipelines

Apache Spark støtter dyp læring via Deep Learning Pipelines. Ved å bruke den eksisterende rørledningsstrukturen til MLlib, kan du ringe inn på dyplæringsbiblioteker på lavere nivå og konstruere klassifiseringer på bare noen få linjer med kode, samt bruke egendefinerte TensorFlow-grafer eller Keras-modeller på innkommende data. Disse grafene og modellene kan til og med registreres som egendefinerte Spark SQL UDFer (brukerdefinerte funksjoner) slik at dyplæringsmodellene kan brukes på data som en del av SQL-setninger.

Apache Spark opplæringsprogrammer

Klar til å dykke inn og lære Apache Spark? Vi anbefaler Evan Heitman's A Neanderthal's Guide to Apache Spark in Python, som ikke bare legger ut det grunnleggende om hvordan Apache Spark fungerer relativt enkelt, men også veileder deg gjennom prosessen med å skrive en enkel Python-applikasjon som bruker rammeverket . Artikkelen er skrevet fra et dataforskers perspektiv, noe som gir mening da datavitenskap er en verden der big data og maskinlæring blir stadig mer kritiske.

Hvis du leter etter noen Apache Spark-eksempler for å gi deg en følelse av hva plattformen kan gjøre, og hvordan den gjør det, kan du sjekke ut Spark By {eksempler}. Det er rikelig med eksempler på kode her for en rekke grunnleggende oppgaver som utgjør byggesteinene i Spark-programmering, slik at du kan se komponentene som utgjør de større oppgavene som Apache Spark er laget for.

Trenger du å gå dypere? DZone har det den beskjedent refererer til som The Complete Apache Spark Collection, som består av en rekke nyttige opplæringsprogrammer om mange Apache Spark-emner. Glad læring!

$config[zx-auto] not found$config[zx-overlay] not found