Vysvetlenie akumulátorov Spark: Apache Spark



Tento blog Apache Spark podrobne vysvetľuje akumulátory Spark. Naučte sa použitie akumulátora Spark na príkladoch. Akumulátory iskier sú ako počítadlá Hadoop Mapreduce.

Prispel Prithviraj Bose

Tu je blog o veciach, ktoré potrebujete vedieť o akumulátoroch Spark.S keďže je to kľúčová zručnosť, ktorú väčšina náborových pracovníkov v oblasti IT loví, jej rast a dopyt v priemysle sú od svojho vzniku exponenciálne.





Čo sú to akumulátory?

Akumulátory sú premenné, ktoré sa používajú na zhromažďovanie informácií medzi vykonávateľmi. Tieto informácie sa môžu týkať napríklad údajov alebo diagnostiky API, napríklad koľko záznamov je poškodených alebo koľkokrát bolo dané API knižnice volané.

Aby sme pochopili, prečo potrebujeme akumulátory, pozrime sa na malý príklad.



Tu je imaginárny denník transakcií obchodného reťazca v centrálnej oblasti Kalkaty.

final konečne finalizovať v jave
logs-Spark-accumulators

K dispozícii sú 4 polia,

Pole 1 -> Mesto



Pole 2 -> Lokalita

Pole 3 -> Kategória predaného tovaru

Pole 4 -> Hodnota predanej položky

Denníky však môžu byť poškodené. Napríklad druhý riadok je prázdny riadok, štvrtý riadok hlási niektoré problémy so sieťou a nakoniec posledný riadok zobrazuje nulovú hodnotu predaja (čo sa nemôže stať!).

Môžeme použiť akumulátory na analýzu protokolu transakcií, aby sme zistili počet prázdnych protokolov (prázdne riadky), počet zlyhaní siete, akýkoľvek produkt, ktorý nemá kategóriu alebo dokonca počet zaznamenaných nulových predajov. Celý vzorový denník nájdete tu .
Akumulátory sú použiteľné na všetky činnosti, ktoré sú
1. Komutatívny -> f (x, y) = f (y, x) a
2. Asociačné -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Napríklad, súčet a max funkcie spĺňajú vyššie uvedené podmienky, zatiaľ čo priemer nie.

Prečo používať akumulátory Spark?

Prečo teda potrebujeme akumulátory a prečo nepoužívať iba premenné, ako je uvedené v kóde nižšie.

Problém s vyššie uvedeným kódom je, že keď ovládač vytlačí premennú prázdne riadky jeho hodnota bude nulová. Je to preto, že keď Spark dodáva tento kód každému exekútorovi, premenné sa stávajú lokálnymi pre tohto exekútora a jeho aktualizovaná hodnota sa neprenáša späť na ovládač. Aby sme sa vyhli týmto problémom, musíme to urobiť prázdne riadky akumulátor taký, že všetky aktualizácie tejto premennej v každom exekútorovi sa prenášajú späť do ovládača. Vyššie uvedený kód by mal byť teda napísaný ako,

To zaručuje, že akumulátor prázdne riadky sa aktualizuje u každého vykonávateľa a aktualizácie sa prenášajú späť do ovládača.

Môžeme implementovať ďalšie počítadlá pre sieťové chyby alebo nulovú hodnotu predaja atď. Celý zdrojový kód spolu s implementáciou ďalších počítadiel nájdete tu .

Ľudia oboznámení s Hadoop Map-Reduce si všimnú, že Sparkove akumulátory sú podobné počítadlám Hadoop Map-Reduce.

programovanie soketu klientskeho servera v jave

Upozornenia

Pri používaní akumulátorov existujú určité výhrady, ktoré si ako programátori musíme uvedomiť,

  1. Výpočty vo vnútri transformácie sú hodnotené lenivo, takže pokiaľ nie akcia sa stane na RDD transformácie sa nevykonávajú. Výsledkom bolo, že akumulátory používané vo vnútri fungovali ako mapa () alebo filter () zvyknutý byť popravený, pokiaľ nejaký akcia stane sa na RDD.
  2. Spoločnosť Spark zaručuje aktualizáciu akumulátorov vo vnútri akcie iba raz . Takže aj keď sa úloha reštartuje a počet riadkov sa prepočíta znova, akumulátory sa aktualizujú iba raz.
  3. Spoločnosť Spark to nezaručuje za transformácie . Takže ak sa úloha reštartuje a počet riadkov sa prepočíta znova, existuje pravdepodobnosť nežiaducich vedľajších účinkov, keď sa akumulátory aktualizujú viackrát.

Pre istotu vždy používajte pri akciách IBA akumulátory.
Kód tu ukazuje jednoduchý, ale účinný príklad, ako to dosiahnuť.
Viac informácií o akumulátoroch sa nachádza v článku toto .

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

Súvisiace príspevky:

Apache Spark combineByKey vysvetlené