Demystifikace rozdělení na oddíly ve Sparku



Tento blog vám řekne vše, co potřebujete vědět o dělení ve Sparku, typech oddílů a o tom, jak zvyšuje rychlost provádění pro klíčové transformace.

Přispěl Prithviraj Bose

Spark's Odolné distribuované datové sady (programovací abstrakce) jsou hodnoceny líně a transformace jsou ukládány jako směrované acyklické grafy (DAG). Takže každá akce na RDD způsobí, že Spark přepočítá DAG. Takto se ve Sparku dosáhne odolnosti, protože pokud některý pracovní uzel selže, je třeba DAG pouze přepočítat.





Je to také povinné do mezipaměti (přetrvávají s odpovídající úrovní úložiště) RDD tak, aby časté akce na RDD nevynucovaly Spark k přepočtu DAG.Témata uvedená v tomto blogu jsou v zásadě vyžadována pro certifikaci Apache Spark a Scala. Témata uvedená v tomto blogu jsou v zásadě vyžadována pro .

Proč používat oddělovač?

V klastrových výpočtech je hlavní výzvou minimalizovat síťový provoz. Když jsou data orientována na klíč-hodnota, rozdělení se stává nezbytným, protože pro následné transformace na RDD existuje značné množství zamíchání dat v síti. Pokud jsou podobné klíče nebo rozsah klíčů uloženy ve stejném oddílu, je zamíchání minimalizováno a zpracování se v podstatě zrychlí.



Transformace, které vyžadují zamíchání dat mezi pracovními uzly, velmi těží z dělení. Takové transformace jsou cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, redukovatByKey, combineByKey a vzhlédnout .

Oddíly lze konfigurovat za předpokladu, že RDD je založen na páru klíč – hodnota.

Vlastnosti oddílu

  1. Je zaručeno, že n-tice ve stejném oddílu jsou ve stejném stroji.
  2. Každý uzel v klastru může obsahovat více než jeden oddíl.
  3. Celkový počet oddílů je konfigurovatelný, ve výchozím nastavení je nastaven na celkový počet jader ve všech uzlech exekutora.

Typy oddílů ve Sparku

Spark podporuje dva typy dělení,

  • Rozdělení hash : Používá Java Object.hashCode metoda pro určení oddílu jako partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Rozdělení oblastí : Používá rozsah k distribuci kláves, které spadají do rozsahu, do příslušných oddílů. Tato metoda je vhodná tam, kde je v klíčích přirozené řazení a klíče nejsou záporné. Níže uvedený fragment kódu ukazuje použití přepážky rozsahu.

Příklad kódu

Podívejme se na příklad, jak rozdělit data mezi pracovní uzly. Celý kód Scala je k dispozici tady .

Zde je několik testovacích dat 12 souřadnic (jako n-tice),

anonymní třída v Javě]

Vytvořit org.apache.spark.HashPartitioner velikosti 2, kde budou klíče rozděleny mezi tyto dva oddíly na základě hash kódu klíčů.

Pak můžeme zkontrolovat páry a provést různé klíčové transformace, jako je foldByKey a redukovatByKey.

Shrnutí, rozdělení výrazně zvyšuje rychlost provádění transformací založených na klíčích.

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.

Související příspěvky:

Proč byste se měli naučit Spark po zvládnutí Hadoopu

Apache Spark Vs Hadoop MapReduce