Apache Spark Optimaliseringsteknikker Og Ytelsesjustering

Av Chandan Gaur|Big Data Engineering|05,Oktober,2020

Hva Er Apache Spark?

Apache, i 2012, beskrev Resilient Distributed Dataset (RDD I Apache Spark) foundation med skrivebeskyttet Distribuerte datasett på distribuerte klynger og kalt Det Som Apache Spark. Senere introduserer De Datasett-API og Deretter Dataframe-Apier for batch og strukturert streaming av data. Denne artikkelen viser ut De beste Apache Spark Optimalisering Teknikker.

Apache Spark Er en rask klynge dataplattform utviklet for å utføre flere beregninger og stream behandling. Spark kan håndtere en rekke arbeidsbelastninger sammenlignet med tradisjonelle systemer som krever flere systemer for å kjøre og støtte. Dataanalyserørledninger tilrettelegges av Spark I Kombinasjon av forskjellige behandlingstyper som er nødvendige for produksjon. Apache Spark er opprettet for å operere med en ekstern cluster manager SOM YARN eller sin frittstående manager.

Funksjoner I Apache Spark

noen funksjoner I Apache Spark inkluderer:-

  • Enhetlig Plattform for å skrive store data applikasjoner.
  • Enkel utvikling.
  • Designet for å være svært tilgjengelig.
  • Spark kan kjøre uavhengig. Dermed gir det fleksibilitet.
  • Kostnadseffektiv.

XenonStack tilbyr analysetjenester og Løsninger For Sanntids-Og Strømdatainntak, behandling og analyse av datastrømmene raskt og effektivt for Tingenes Internett, Overvåking, Forebyggende Og Prediktivt Vedlikehold.

Fra Artikkelen, Streaming Og Sanntids Analysetjenester

Forstå Hvordan Apache Spark Optimalisering Fungerer?

for å forstå Hvordan Apache Spark optimization fungerer, må du forstå arkitekturen først og i den etterfølgende delen vil vi utarbeide det samme.

arkitekturen Til Apache Spark

Run-time –arkitekturen Til Spark består av tre deler –

Spark Driver (Master Process)

Spark-Driveren konverterer programmene til oppgaver og planlegger oppgavene for Eksekutorer. Oppgaveplanleggeren er En Del Av Driveren og bidrar til å distribuere oppgaver til Eksekutorer.

Spark Cluster Manager

en cluster manager er kjernen I Spark som gjør det mulig å starte eksekutorer og noen ganger drivere kan lanseres av det også. Spark Scheduler planlegger handlinger og jobber I Spark Søknad I FIFO måte på cluster manager selv. Du bør også lese Om Apache Airflow.

Eksekutorer (Slaveprosesser)

Eksekutorer er de individuelle enhetene som individuell Oppgave Av Jobb kjører. Eksekutorer vil alltid løpe til livssyklusen til en spark-Applikasjon når de lanseres. Mislykkede eksekutorer stopper ikke utførelsen av spark job.

RDD (Resilient Distributed Datasets)

EN RDD er en distribuert samling av uforanderlige datasett på distribuerte noder i klyngen. EN RDD er partisjonert i en eller flere partisjoner. RDD er kjernen i spark som deres fordeling mellom ulike noder i klyngen som utnytter data lokalitet. For å oppnå parallellisme inne i applikasjonen Er Partisjoner enhetene for den. Partisjonere eller koalesere transformasjoner kan bidra til å opprettholde antall partisjoner. Datatilgang er optimalisert utnytte RDD shuffling. Som Spark er nær data, sender den data over ulike noder gjennom den og skaper nødvendige partisjoner etter behov.

DAG (Rettet Asyklisk Graf)

Gnist har en tendens til å generere en operatorgraf når vi skriver inn koden vår Til Spark console. Når en handling utløses Til Spark RDD, Sender Spark den grafen Til DAGScheduler. Det deler deretter disse operatørgrafene til stadier av oppgaven i DAGScheduler. Hvert trinn kan inneholde jobber basert på flere partisjoner av innkommende data. Den DAGScheduler rørledninger de enkelte operatør grafer sammen. For Eksempel, Kart operatør grafer tidsplan for en enkelt-trinns og disse stadiene passere videre til. Oppgaveplanlegger i klyngebehandling for utførelse. Dette er oppgaven Med Arbeid eller Eksekutorer å utføre disse oppgavene på slaven.

Distribuert behandling ved hjelp av partisjoner effektivt

Å Øke antall Eksekutorer på klynger øker også parallelliteten i Behandling Av Gnistjobb. Men for dette må man ha tilstrekkelig informasjon om hvordan dataene vil bli distribuert blant disse eksekutorene via partisjonering. RDD er nyttig for denne saken med ubetydelig trafikk for data shuffling over disse eksekutorer. Man kan tilpasse partisjonering for par RDD (RDD med nøkkelverdipar). Spark sikrer at sett med nøkler alltid vil vises sammen i samme node fordi det ikke er noen eksplisitt kontroll i dette tilfellet.

Apache Spark security hjelper autentisering gjennom en delt hemmelighet. Spark-godkjenning er konfigurasjonsparameteren som godkjenning kan konfigureres gjennom. Det er parameteren som kontrollerer om protokollene i gnistkommunikasjonen gjør godkjenning ved hjelp av en delt hemmelighet eller ikke.

Fra Artikkelen, Apache Spark Security

Feil å unngå mens du skriver Spark Applications

reduceByKey eller groupByKey

både groupByKey og reduceByKey produsere det samme svaret, men konseptet for å produsere resultater er forskjellige. reduceByKey er best egnet for store datasett fordi I Spark den kombinerer utgang med en delt nøkkel for hver partisjon før shuffling av data. Mens på den andre siden, groupbykey shuffles alle nøkkel-verdi par. GroupByKey forårsaker unødvendige shuffles og overføring av data over nettverket.

Behold den nødvendige størrelsen på blandeblokkene

Spark shuffle block kan som standard ikke overstige 2 GB. Jo bedre bruk er å øke partisjonene og redusere kapasiteten til ~128mb per partisjon som vil redusere shuffle-blokkstørrelsen. Vi kan bruke partisjonere eller koalesere i vanlige applikasjoner. Store partisjoner gjør prosessen sakte på GRUNN AV en grense PÅ 2 GB, og få partisjoner tillater ikke å skalere jobben og oppnå parallelliteten.

Filformater Og Skilletegn

Å Velge Riktige Filformater for hver datarelaterte spesifikasjon er en hodepine. Man må velge klokt dataformatet for Inntak typer, Mellomliggende type, Og Endelig utgang type. Vi Kan Også Klassifisere datafilformater for hver type på flere måter som vi kan bruke avro filformat for lagring Av Mediedata som Avro er best optimalisert for binære data Enn Parkett. Parkett kan brukes til lagring av metadata informasjon som det er svært komprimert.

Små Datafiler

Kringkasting er en teknikk for å laste inn små datafiler eller datasett I Blokker med minne, slik at de kan slås sammen med mer massive datasett med mindre overhead av shuffling data. For Eksempel kan Vi lagre Små datafiler i n Antall Blokker, Og Store datafiler kan knyttes til Disse Datablokkene i fremtiden, Da Store datafiler kan distribueres mellom disse blokkene parallelt.

Ingen Overvåking Av Jobbstrinn

DAG er en datastruktur som brukes I Spark som beskriver ulike stadier av oppgaver I Grafformat. De fleste utviklerne skriver og utfører koden, men overvåking Av Jobboppgaver er viktig. Denne overvåkingen oppnås best ved å styre DAG og redusere stadiene. Jobben med 20 trinn er forlenget i forhold til en jobb med 3-4 Trinn.

ByKey, partisjonering eller andre operasjoner som utløser shuffles

De fleste ganger må Vi unngå shuffles så mye vi kan som data shuffles over mange, og noen ganger blir det svært komplisert å få Skalerbarhet ut av disse shuffles. GroupByKey kan være en verdifull ressurs, men behovet må beskrives først.

Forsterkningslæring

Forsterkningslæring er ikke bare konseptet for å oppnå bedre Maskinlæringsmiljø, men også å behandle beslutninger på en bedre måte. Man må bruke dyp forsterkningslæring i spark hvis overgangsmodellen og belønningsmodellen er bygget riktig på datasett, og også agenter er i stand til å estimere resultatene.

Apache Spark Optimalisering Faktorer Og Teknikker

En Av de beste funksjonene I Apache Spark optimalisering er det hjelper For In-memory data beregninger. Flaskehalsen for disse gnistoptimaliseringsberegningene kan VÆRE CPU, minne eller en ressurs i klyngen. Et behov for å serialisere dataene, redusere minnet kan oppstå i slike tilfeller. Disse faktorene for gnistoptimalisering, hvis de brukes riktig, kan–

  • Eliminer den langvarige jobbprosessen
  • Motor For Kjøring Av Korreksjon
  • Forbedrer ytelsestiden ved å administrere ressurser

13 Enkle Teknikker For Apache Spark Optimalisering

Akkumulatorer er globale variabler til eksekutørene som bare kan legges til gjennom en assosiativ og kommutativ operasjon. Det kan derfor være effektivt parallelt. Akkumulatorer kan brukes til å implementere tellere (samme Som I Map Redusere) eller en annen oppgave som sporing API-kall.

Spark støtter som standard numeriske akkumulatorer, men programmerere har fordelen av å legge til støtte for nye typer. Spark sikrer at hver oppgave oppdatering vil bare bli brukt en gang til akkumulator variablene. Under transformasjoner bør brukerne ha en bevissthet om hver oppgaves oppdatering, da disse kan brukes mer enn en gang hvis jobbfaser utføres på nytt.

Hive Bucketing Performance

Bucketing resultater med et fast antall filer som vi angir antall skuffer med en bøtte. Hive tok feltet, beregne hash og tilordne en post til den aktuelle bøtte. Bucketing er mer stabilt når feltet har høy kardinalitet, Stor Databehandling og poster er jevnt fordelt mellom alle skuffer mens partisjonering fungerer når kardinaliteten til partisjoneringsfeltet er lav.

Bucketing reduserer overhead av sortering av filer. For Eksempel, hvis vi blir med to tabeller som har like mange bøtter i det, blir spark dataene direkte som nøkler som allerede er sortert bøtter. Antall bøtte filer kan beregnes som flere partisjoner i flere bøtter.

Predikat Pushdown Optimalisering

Predikat pushdown er en teknikk for å behandle bare de nødvendige dataene. Predikater kan brukes Til SparkSQL ved å definere filtre i where betingelser. Ved å bruke forklar kommando til spørring kan vi sjekke spørringsbehandlingsstadiene. Hvis spørringsplanen inneholder PushedFilter enn spørringen er optimalisert for å velge bare nødvendige data som hver predikat returnerer Enten Sann eller Usann.

Hvis Det ikke Finnes Noen PushedFilter i spørringsplanen, er det bedre å kaste where-tilstanden. Predikat Pushdowns begrenser antall filer og partisjoner Som SparkSQL leser mens du spør, og reduserer dermed disk I / O starter In-Memory Analytics. Spørring på data i bøtter med predikat pushdowns gir resultater raskere med mindre shuffle.

Null Dataserialisering / Deserialisering ved Bruk Av Apache-Pil

Apache-Pil brukes som et in-Memory run-time-format for analytiske spørringsmotorer. Arrow gir data serialisering / deserialisering null shuffles gjennom delt minne. Arrow flight sender de store datasettene over nettverket. Arrow har sin pil filformat som tillater null-kopi tilfeldig tilgang til data på-disker. Arrow har et standard datatilgangslag for alle spark-applikasjoner.

det reduserer overhead For SerDe operasjoner for shuffling data som den har et felles sted hvor alle data er bosatt og i pil bestemt format.

Garbage Collection Tuning bruker G1GC Collection

når tuning søppelsamlere, anbefaler vi først å bruke G1 GC til å kjøre Spark-programmer. G1 garbage collector håndterer helt voksende hauger som ofte ses Med Gnist. Med G1 vil det være behov for færre alternativer for å gi både høyere gjennomstrømning og lavere ventetid. For å kontrollere uforutsigbare egenskaper og atferd av ulike applikasjoner MÅ GC tuning mestres i henhold til genererte logger.

Før dette må andre optimaliseringsteknikker som Streaming og Sanntidsanalyseløsninger, i programmets logikk og kode, brukes. Mesteparten AV TIDEN BIDRAR G1GC til å optimalisere pausetiden mellom prosesser som ganske ofte er I Gnistapplikasjoner, og reduserer Dermed Jobbkjøringstiden med et mer pålitelig system.

Minnehåndtering Og Tuning

som vi vet at For beregninger som shuffling, sortering og så videre, Brukes Utførelsesminne mens lagringsminne brukes til caching som også forplanter interne data. Det kan være noen tilfeller der jobber ikke bruker noen cache; derfor tilfeller ut av plass feil under kjøring. Bufrede jobber bruker alltid mindre lagringsplass der dataene ikke er tillatt å bli kastet ut av noen kjøring krav. I tillegg Kan Sanntids Streaming Søknad Med Apache Spark gjøres.

Vi kan sette gnist.minne.brøk for å bestemme hvor MYE JVM heap plass brukes For Gnist kjøring minne. Vanligvis er 60% standard. Eksekutor minne må holdes så mindre som mulig fordi det kan føre til forsinkelse AV JVM Søppelsamling. Dette faktum gjelder også for små eksekutorer, da flere oppgaver kan kjøre på en ENKELT jvm-forekomst.

Datalokalitet

I Apache Spark optimaliseres Behandlingsoppgaver ved å plassere utførelseskoden nær de behandlede dataene, kalt datalokalitet. Noen ganger må behandlingsoppgaven vente før du får data fordi data ikke er tilgjengelige. Men når tiden for gnist.lokalitet.vent utløper, Spark prøver mindre lokalt nivå, Dvs. Lokal til noden til rack til noen.

Overføring av data mellom disker er svært kostbart, så de fleste operasjonene må utføres på stedet der dataene ligger. Det hjelper å laste bare liten, men krevde mengden data sammen med testdrevet utvikling For Apache Spark.

Ved Hjelp Av Samlokaliserte Koblinger

Samlokaliserte koblinger tar beslutninger om omfordeling og kringkasting. Vi kan definere små datasett som skal plasseres i flere blokker med minne for å oppnå bedre Bruk av Kringkasting. Mens du bruker koblinger på to datasett, sorterer spark først dataene i begge datasettene etter nøkkel og dem slås sammen.

men vi kan også bruke sorteringspartisjonsnøkkel før du blir med i dem eller når du lager disse datarammer Iapache – Pilarkitekturen. Dette vil optimalisere kjøretiden til spørringen, da det ikke ville være noen unødvendige funksjonskall å sortere.

Caching I Spark

Caching I Apache Spark MED GPU er den beste teknikken For Apache Spark Optimalisering når vi trenger noen data igjen og igjen. Men det er alltid ikke akseptabelt å cache data.

Vi må bruke cache () RDD og DataFrames i noen av følgende tilfeller–

  • Når det er en iterativ sløyfe som I Maskinlæringsalgoritmer.
  • NÅR RDD åpnes flere ganger i en enkelt jobb eller oppgave.
  • når kostnaden for å generere RDD-partisjonene igjen er høyere.

Cache () Og vedvarer (StorageLevel.MEMORY_ONLY) kan brukes i stedet for hverandre. Hver RDD-partisjon som blir kastet ut av minnet, må bygges igjen fra kilden som fortsatt er veldig dyr. En av de beste løsningene er å bruke vedvarer (Lagringsnivå.MEMORY_AND_DISK_ONLY) som ville spyle partisjonene TIL RDD til Arbeiderens lokale disk. Denne saken krever bare å få data fra Arbeiderens lokale stasjon som er relativt rask.

Eksekutorstørrelse

når vi kjører eksekutorer med høyt minne, resulterer det ofte i overdreven forsinkelser i søppelinnsamling. Vi må holde kjernene teller per eksekutor under fem oppgaver per eksekutor. For små eksekutorer kom ikke ut til å være nyttige når det gjelder å kjøre flere jobber på enkelt JVM.

for eksempel må kringkastingsvariabler replikeres for hver eksekutor nøyaktig en gang, noe som vil resultere i flere kopier av dataene.

Spark Windowing-Funksjon

en vindusfunksjon definerer en ramme som vi kan beregne inndatarader av et bord. På individuelle rad nivå. Hver rad kan ha et klart rammeverk. Windowing tillater oss å definere et vindu for data i datarammen. Vi kan sammenligne flere rader i samme dataramme.

vi kan sette vinduet tid til et bestemt intervall som vil løse problemet med dataavhengighet med tidligere data. Shuffling I Apache Beam er mindre på tidligere behandlede data da vi beholder dataene for vindusintervall.

Vannmerker Teknikk

Vannmerking Er en nyttig teknikk I Apache Spark Optimalisering som begrenser systemet ved design og bidrar til å hindre den fra å eksplodere under kjøring. Vannmerke tar to argumenter–

  • Kolonne for hendelsestid og
  • en terskeltid som angir hvor lenge vi er pålagt å behandle sen data

spørringen I Apache Arrow Architecture vil automatisk bli oppdatert hvis data faller innenfor den fastsatte terskelen; ellers utløses ingen behandling for de forsinkede dataene. Man må huske at Vi kan bruke Fullstendig modus side om side med vannmerking fordi full modus først fortsetter alle dataene til den resulterende tabellen.

Dataserialisering

apache Spark optimalisering fungerer på data som vi trenger å behandle for noen brukstilfeller Som Analyse eller bare for bevegelse av data. Denne bevegelsen av data eller Analyser kan utføres godt hvis data er i noe bedre serialisert format. Apache Spark støtter dataserialisering for å administrere dataformatene som trengs ved Kilde eller Destinasjon effektivt. Som Standard Bruker Apache Spark Java-Serialisering, men støtter Også Kryo-Serialisering.

Spark bruker Som standard Javas ObjectOutputStream til å serialisere dataene. Implementeringen kan være gjennom java.io.Serialiserbar klasse. Det koder objektene i en strøm av byte. Det gir lett utholdenhet og fleksibel. Men det blir sakte da det fører til store serialiserte formater for hver klasse den brukes i. Spark støtter Kryo Serialization library (v4) For Serialisering av objekter nesten 10x raskere Enn Java Serialisering som det er mer kompakt Enn Java.

Apache Spark Optimalisering: En Omfattende Tilnærming

Apache Spark, en åpen kildekode distribuert databehandlingsmotor, er for tiden det mest populære rammeverket for batchbehandling i minnet, som også støtter sanntids streaming. Med sin avanserte søkeoptimerings-og utførelsesmotor kan Apache Spark Optimaliseringsteknikker behandle og analysere store datasett veldig effektivt. Men kjører Apache Spark Join Optimaliseringsteknikker uten nøye tuning kan forringe ytelsen. Hvis Du vil utnytte Apache Spark-Applikasjonskraften din, kan du sjekke Ut Våre Administrerte Apache Spark-Tjenester.

Kategorier :

Utvikling Av Store Data, Løsninger For Store Data, Strømming Av Dataanalyse,

Dele:

You might also like

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.