8 Ytelsesoptimaliseringsteknikker Ved Hjelp Av Spark

Anta at du har en situasjon der ett datasett er veldig lite og et annet datasett er ganske stort, og du vil utføre sammenføyningsoperasjonen mellom disse to. I så fall bør vi gå til sendingen, slik at det lille datasettet kan passe inn i kringkastingsvariabelen. Syntaksen for å bruke kringkastingsvariabelen er df1.bli med(kringkasting (df2)). Her har vi en andre dataframe som er veldig liten, og vi holder denne datarammen som en kringkastingsvariabel.

Kode:

val broadcastVar = sc.broadcast (Array)(1, 2, 3))

broadcastVar.verdi

res0:Array = Array(1, 2, 3)

val accum = sc . longAccumulator («Min Akkumulator»)

sc.parallelize (Array)(1, 2, 3, 4)).foreach (x = > akkum.legg til (x))

accum.verdi

res2: Long = 10

Cache Og Vedvarer

  • Spark gir sine egne caching mekanismer som vedvarer () og cache ().
  • cache() og persist () lagrer datasettet i minnet.
  • når du har et lite datasett som må brukes flere ganger i programmet, cache vi datasettet.
  • Cache () – alltid I Minnet
  • Vedvarer() – Minne og disker

Spark gir sin egen caching mekanisme Som Vedvarer og Caching. Vedvarer og Cache mekanismer vil lagre datasettet i minnet når det er krav, der du har et lite datasett og at datasettet blir brukt flere ganger i programmet. Hvis vi bruker RDD.Cache () det vil alltid lagre dataene i minnet, og hvis vi bruker RDD.Vedvarer () da en del av data kan lagres i minnet noen kan lagres på disken.

5. ByKey Operasjon

  • Shuffles er tung operasjon som bruker mye minne.
  • mens koding I Spark, bør brukeren alltid prøve å unngå shuffle drift.
  • Høy shuffling kan gi opphav til En OutOfMemory Feil; for å unngå en slik feil, kan brukeren øke nivået av parallellitet.
  • Bruk reduceByKey i stedet for groupByKey.
  • Partisjonere dataene riktig.

Som vi vet under vår transformasjon Av Spark har vi mange ByKey operasjoner. ByKey-operasjoner genererer mye shuffle. Shuffles er tung operasjon fordi de bruker mye minne. Når du koder I Spark, bør en bruker alltid prøve å unngå shuffle-operasjon fordi shuffle-operasjonen vil forringe ytelsen. Hvis det er høy shuffling, kan en bruker få feilen ut av minnet. I dette tilfellet, for å unngå den feilen, bør en bruker øke nivået av parallellisme. I stedet for groupBy, bør en bruker gå for reduceByKey fordi groupByKey skaper mye shuffling som hemmer ytelsen, mens reduceByKey ikke shuffle dataene så mye. Derfor er reduceByKey raskere sammenlignet med groupByKey. Når Noen ByKey operasjon brukes, bør brukeren partisjonere dataene riktig.

6. Filformatvalg

  • Spark støtter mange formater, FOR EKSEMPEL CSV, JSON, XML,PARKETT, ORC, avro, etc.
  • Spark jobs kan optimaliseres ved å velge parkett fil med irritabel komprimering som gir høy ytelse og beste analyse.
  • Parkettfil er innfødt Til Spark som bærer metadataene sammen med bunnteksten.

Spark kommer med mange filformater som CSV, JSON, XML, PARKETT, ORC, AVRO og mer. En Spark jobb kan optimaliseres ved å velge parkett fil med irritabel komprimering. Parkettfilen er innfødt Til Spark som bærer metadataene sammen med bunnteksten som vi vet, er parkettfilen innfødt til spark som er i binært format, og sammen med dataene bærer den også bunnteksten, den bærer også metadataene og bunnteksten, så når du lager en parkettfil, vil du se .metadata fil på samme katalog sammen med datafilen.

Kode:

val peopleDF = gnist.lese.json («eksempler/src/hoved/ressurser/mennesker.json»)

peopleDF.skrives.parkett («folk.parkett»)

val parquetFileDF = gnist.lese.parkett («folk.parkett»)

val usersDF = gnist.lese.format(«avro»).load («eksempler / src / main / ressurser / brukere.avro»)

usersDF.velg («navn», «favorite_color»).skrives.format(«avro»).lagre («namesAndFavColors.Avro»)

Søppelsamling Tuning

  • jvm søppelsamling kan være et problem når du har stor samling av ubrukte objekter.
  • DET første trinnet I gc tuning er å samle statistikk ved å velge-detaljert mens du sender spark jobs.
  • i en ideell situasjon prøver vi å holde gc-kostnader < 10% av heap-minnet.

som vi vet under Vår Spark jobb kjører PÅ jvm plattformen så jvm søppelsamling kan være et problematisk når DU har en stor samling av en ubrukt objekt så det første trinnet i tuning av søppelsamling er å samle statikk ved å velge alternativet I Spark send ordrik. Generelt, i en ideell situasjon bør vi holde søppelinnsamlingsminnet mindre enn 10% av heap-minnet.

8. Nivå Av Parallellitet

  • Parallellitet spiller en svært viktig rolle mens tuning gnist jobber.
  • Hver partisjon ~ oppgave krever en enkelt kjerne for behandling.
  • det er to måter å opprettholde parallelliteten på:
    • Partisjonering: Gir like mange partisjoner med høy shuffling
    • Coalesce: reduserer Vanligvis antall partisjoner med mindre shuffling.

i et distribuert miljø spiller parallellisme svært viktig rolle mens du justerer Gnistjobben din. Når En Spark-jobb sendes inn, oppretter den skrivebordet som vil inneholde stadier, og oppgavene avhenger av partisjonen, slik at hver partisjon eller oppgave krever en enkelt kjerne av systemet for behandling. Det er to måter å opprettholde parallelliteten På-Partisjonering og Koalesering. Når du bruker Repartisjonsmetoden, gir det deg like mange partisjoner, men det vil blande mye, så det er ikke tilrådelig å gå For Partisjonering når du vil lash alle dataene. Coalesce vil generelt redusere antall partisjoner og skaper mindre shuffling av data.

disse faktorene for gnistoptimalisering, hvis de brukes riktig, kan –



+