Avmystifierar partitionering i Spark

Den här bloggen berättar allt du behöver veta om partitionering i Spark, partitionstyper och hur det förbättrar exekveringshastigheten för nyckelbaserade transformationer.

Bidrag från Prithviraj Bose

Spark's Fjädrande distribuerade datamängder (programmeringsabstraktionen) utvärderas lat och transformationerna lagras som riktade acykliska grafer (DAG). Så varje åtgärd på RDD gör att Spark beräknar DAG. Så här uppnås flexibiliteten i Spark, för om någon arbetarnod misslyckas behöver DAG bara beräknas om.





Det är också obligatoriskt att cache (fortsätter med lämplig lagringsnivå) RDD så att frekventa åtgärder på RDD inte tvingar Spark att omberäkna DAG.Ämnen som tas upp i den här bloggen krävs i huvudsak för Apache Spark och Scala-certifiering. Ämnen som behandlas i den här bloggen krävs i huvudsak för .

Varför använda en partitioner?

I cluster computing är den centrala utmaningen att minimera nätverkstrafik. När data är nyckelvärdesorienterade blir partitionering avgörande eftersom det för efterföljande transformationer på RDD finns en hel del blandning av data över nätverket. Om liknande nycklar eller tangentintervall lagras i samma partition minimeras blandningen och behandlingen blir väsentligen snabb.



Transformationer som kräver blandning av data över arbetarnoder har stor nytta av partitionering. Sådana omvandlingar är cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey och slå upp .

Partitioner kan konfigureras förutsatt att RDD är baserat på nyckelvärde.

Partitionens egenskaper

  1. Tuples i samma partition är garanterat i samma maskin.
  2. Varje nod i ett kluster kan innehålla mer än en partition.
  3. Det totala antalet partitioner kan konfigureras, som standard är det inställt på det totala antalet kärnor på alla exekveringsnoder.

Typer av partitionering i Spark

Spark stöder två typer av partitionering,

hur man använder spyder python
  • Hashpartitionering : Använder Java Object.hashCode metod för att bestämma partitionen som partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Områdespartitionering : Använder ett intervall för att distribuera tangenterna som faller inom ett intervall till respektive partitioner. Den här metoden är lämplig när det finns en naturlig ordning i tangenterna och tangenterna inte är negativa. Nedanstående kodavsnitt visar användningen av intervallpartitioner.

Kodexempel

Låt oss se ett exempel på hur man delar data över arbetarnoder. Den fullständiga Scala-koden är tillgänglig här .

Här är några testdata med 12 koordinater (som tuples),

hur man avslutar ett program i java

Skapa en org.apache.spark.HashPartitioner av storlek 2, där nycklarna kommer att delas över dessa två partitioner baserat på tangenternas hash-kod.

Sedan kan vi inspektera paren och göra olika nyckelbaserade transformationer som foldByKey och reduceraByKey.

Sammanfattningsvis förbättrar partitionering kraftigt körningshastigheten för nyckelbaserade transformationer.

Har du en fråga till oss? Vänligen nämna det i kommentarfältet så återkommer vi till dig.

Relaterade inlägg:

Varför bör du lära dig gnista efter att ha behärskat Hadoop

hur man kastar dubbelt till int

Apache Spark mot Hadoop MapReduce