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
- N-tice v rovnakom oddiele sú zaručene v rovnakom stroji.
- Každý uzol v klastri môže obsahovať viac ako jeden oddiel.
- 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.
- 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