Avmystifiserende partisjonering i Spark



Denne bloggen forteller deg alt du trenger å vite om partisjonering i Spark, partisjonstyper og hvordan det forbedrer kjøringshastigheten for nøkkelbaserte transformasjoner.

Bidratt av Prithviraj Bose

Spark’s Spenstige distribuerte datasett (programmeringsabstraksjonen) evalueres lat og transformasjonene lagres som dirigerte asykliske grafer (DAG). Så hver handling på RDD vil få Spark til å beregne DAG på nytt. Dette er hvordan elastisiteten oppnås i Spark, for hvis noen arbeiderknuter mislykkes, må DAG bare beregnes på nytt.





Det er også obligatorisk å cache (fortsett med passende lagringsnivå) RDD slik at hyppige handlinger på RDD ikke tvinger Spark til å beregne DAG på nytt.Emner som dekkes i denne bloggen er i hovedsak påkrevd for Apache Spark og Scala-sertifisering. Emner som er dekket i denne bloggen, er i hovedsak påkrevd for .

Hvorfor bruke en partisjonering?

I klyngecomputer er den sentrale utfordringen å minimere nettverkstrafikk. Når dataene er nøkkelverdiorientert, blir partisjonering avgjørende fordi for påfølgende transformasjoner på RDD, er det en god del blanding av data over nettverket. Hvis lignende nøkler eller utvalg av nøkler er lagret i samme partisjon, blir blandingen minimert og behandlingen blir vesentlig rask.



Transformasjoner som krever blanding av data på tvers av arbeidernoder, har stor nytte av partisjonering. Slike transformasjoner er cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey og se opp .

Partisjoner kan konfigureres forutsatt at RDD er nøkkelverdibasert.

Egenskaper av partisjon

  1. Tupler i samme skillevegg er garantert i samme maskin.
  2. Hver node i en klynge kan inneholde mer enn én partisjon.
  3. Totalt antall partisjoner kan konfigureres, som standard er det satt til totalt antall kjerner på alle eksekveringsnodene.

Typer av partisjonering i Spark

Spark støtter to typer partisjonering,

  • Hash-partisjonering : Bruker Java Object.hashCode metode for å bestemme partisjonen som partisjon = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Område partisjonering : Bruker et område for å distribuere tastene som faller innenfor et område til de respektive partisjonene. Denne metoden er egnet der det er en naturlig rekkefølge i nøklene og nøklene ikke er negative. Kodebiten nedenfor viser bruken av rekkevidde partisjonering.

Kodeeksempel

La oss se et eksempel på hvordan du partisjonerer data på tvers av arbeidernoder. Hele Scala-koden er tilgjengelig her .

Her er noen testdata med 12 koordinater (som tupler),

Lag en org.apache.spark.HashPartitioner av størrelse 2, der nøklene vil bli partisjonert over disse to partisjonene basert på hash-koden til nøklene.

Så kan vi inspisere parene og gjøre forskjellige nøkkelbaserte transformasjoner som foldByKey og redusereByKey.

Oppsummering, partisjonering forbedrer kjørehastigheten for nøkkelbaserte transformasjoner sterkt.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet, så kommer vi tilbake til deg.

Relaterte innlegg:

java forskjell mellom redskaper og utvidelser

Hvorfor du bør lære gnist etter å ha mestret Hadoop

Apache Spark mot Hadoop MapReduce