Demystifikácia rozdelenia disku na Spark



Tento blog vám hovorí všetko, čo potrebujete vedieť o rozdelení na oddiely v Sparku, typoch oddielov a o tom, ako zvyšuje rýchlosť vykonávania transformácií založených na kľúčoch.

Prispel Prithviraj Bose

Spark’s Odolné distribuované súbory údajov (programátorská abstrakcia) sa hodnotia lenivo a transformácie sa ukladajú ako usmernené acyklické grafy (DAG). Takže každá akcia na RDD spôsobí, že Spark prepočíta DAG. Takto sa v Sparku dosiahne odolnosť, pretože ak niektorý uzol pracovníka zlyhá, je potrebné DAG iba prepočítať.





Je to tiež povinné ukladanie do medzipamäte (pretrvávajú s vhodnou úrovňou úložiska) RDD tak, že časté akcie na RDD neprinútia Spark, aby prepočítal DAG.Témy obsiahnuté v tomto blogu sú v podstate požadované pre certifikáciu Apache Spark a Scala. Témy obsiahnuté v tomto blogu sú v podstate nevyhnutné pre .

Prečo používať priečku?

V klastrových výpočtoch je hlavnou výzvou minimalizovať sieťový prenos. Keď sú údaje orientované na kľúč a hodnotu, rozdelenie sa stáva nevyhnutným, pretože pre následné transformácie na RDD existuje značné množstvo zamiešania údajov v sieti. Ak sú v rovnakom oddiele uložené podobné kľúče alebo rozsah klávesov, je zamiešanie minimalizované a spracovanie sa stáva v podstate rýchle.



Transformácie, ktoré si vyžadujú premiešanie údajov medzi pracovnými uzlami, majú z rozdelenia oddielov veľkú výhodu. Takéto transformácie sú cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey a vyhľadať .

Skupiny sú konfigurovateľné za predpokladu, že RDD je založený na páre kľúč - hodnota.

Vlastnosti oddielu

  1. N-tice v rovnakom oddiele sú zaručene v rovnakom stroji.
  2. Každý uzol v klastri môže obsahovať viac ako jeden oddiel.
  3. Celkový počet oddielov je konfigurovateľný, štandardne je nastavený na celkový počet jadier na všetkých uzloch vykonávateľa.

Typy rozdelenia na časti v Spark

Spark podporuje dva typy oddielov,

  • Rozdelenie mriežky : Používa Java Object.hashCode metóda na určenie oddielu ako partition = key.hashCode ()% numPartitions.

hash-partitioning-demystifying-partitioning-in-spark



  • Rozdelenie rozsahu : Používa rozsah na distribúciu klávesov, ktoré spadajú do rozsahu, do príslušných oblastí. Táto metóda je vhodná tam, kde je v klávesoch prirodzené usporiadanie a kľúče nie sú záporné. Fragment kódu nižšie ukazuje použitie oddeľovača rozsahu.

Príklad kódu

Pozrime sa na príklad, ako rozdeliť údaje medzi pracovné uzly. K dispozícii je celý kód Scala tu .

Tu je niekoľko testovacích údajov s 12 súradnicami (ako n-tice),

ako používať trim v jave

Vytvorte org.apache.spark.HashPartitioner veľkosti 2, kde sa kľúče rozdelia medzi tieto dve oddiely na základe hašovacieho kódu kľúčov.

Potom môžeme páry skontrolovať a vykonať rôzne transformácie založené na kľúči, ako napríklad foldByKey a redukovatByKey.

Zhrnutie, rozdelenie na oddiely výrazne zvyšuje rýchlosť vykonávania transformácií založených na kľúčoch.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov a my sa vám ozveme.

Súvisiace príspevky:

Prečo by ste sa mali naučiť Spark po zvládnutí Hadoopu

Apache Spark Vs Hadoop MapReduce