Afmystificering af partitionering i gnist



Denne blog fortæller dig alt hvad du behøver at vide om partitionering i Spark, partitionstyper og hvordan det forbedrer eksekveringshastigheden for nøglebaserede transformationer.

Bidrag fra Prithviraj Bose

Spark's Modstandsdygtige distribuerede datasæt (programmeringsabstraktionen) evalueres doven, og transformationerne lagres som dirigerede acykliske grafer (DAG). Så hver handling på RDD vil få Spark til at genberegne DAG. Sådan opnås modstandsdygtigheden i Spark, for hvis en arbejdsknude fejler, skal DAG bare beregnes igen.





Det er også obligatorisk at cache (fortsætter med passende lagerniveau) RDD'en, således at hyppige handlinger på RDD ikke tvinger Spark til at genberegne DAG.Emner, der er dækket af denne blog, er i det væsentlige påkrævet for Apache Spark og Scala-certificering. Emner, der er dækket af denne blog, er i det væsentlige påkrævet for .

Hvorfor bruge en partitioner?

I klyngecomputer er den centrale udfordring at minimere netværkstrafik. Når dataene er nøgleværdiorienteret, bliver partitionering bydende nødvendigt, fordi der for efterfølgende transformationer på RDD er en hel del blanding af data over hele netværket. Hvis lignende nøgler eller række nøgler er gemt i den samme partition, minimeres blandingen, og behandlingen bliver i det væsentlige hurtig.



Transformationer, der kræver blanding af data på tværs af medarbejdernoder, har stor fordel af partitionering. Sådanne transformationer er cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey og kig op .

Partitioner kan konfigureres, forudsat at RDD er baseret på nøgleværdi.

Partitionens egenskaber

  1. Tuples i den samme skillevæg er garanteret i den samme maskine.
  2. Hver knude i en klynge kan indeholde mere end en partition.
  3. Det samlede antal partitioner kan konfigureres, det er som standard indstillet til det samlede antal kerner på alle eksekveringsnoder.

Typer af opdeling i gnist

Spark understøtter to typer partitionering,

  • Hash partitionering : Bruger Java'er Object.hashCode metode til at bestemme partitionen som partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Område partitionering : Bruger et interval til at distribuere de nøgler, der falder inden for et område, til de respektive partitioner. Denne metode er velegnet, når der er en naturlig rækkefølge i tasterne, og nøglerne ikke er negative. Nedenstående kodestykke viser brugen af ​​rækkevidde.

streng til dato konvertering i java

Kodeeksempel

Lad os se et eksempel på, hvordan man partitionerer data på tværs af arbejdernoder. Den fulde Scala-kode er tilgængelig her .

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

Opret en org.apache.spark.HashPartitioner i størrelse 2, hvor nøglerne vil blive opdelt på tværs af disse to partitioner baseret på hash-koden på tasterne.

forskel mellem klasse og interface i java

Derefter kan vi inspicere parrene og udføre forskellige nøglebaserede transformationer som f.eks foldByKey og reducereByKey.

Sammenfatning forbedrer partitionering i høj grad eksekveringshastigheden for nøglebaserede transformationer.

Har du et spørgsmål til os? Nævn det i kommentarfeltet, og vi vender tilbage til dig.

Relaterede indlæg:

Hvorfor du skal lære gnist efter mestring af Hadoop

Apache Spark mod Hadoop MapReduce