Pojasnjeni akumulatorji isker: Apache Spark



Ta spletni dnevnik Apache Spark podrobno razlaga akumulatorje Spark. S primeri se naučite uporabe akumulatorja Spark. Akumulatorji isker so kot števci Hadoop Mapreduce.

Prispeval Prithviraj Bose

Tukaj je blog o stvareh, ki jih morate vedeti o akumulatorjih Spark.S Ker je ključna veščina, za katero lovi večina zaposlovalcev IT, je njena rast in povpraševanje v tej panogi že od samega začetka eksponentna.





Kaj so akumulatorji?

Akumulatorji so spremenljivke, ki se uporabljajo za združevanje informacij med izvršitelji. Na primer, te informacije se lahko nanašajo na podatke ali diagnozo API, na primer koliko zapisov je poškodovanih ali kolikokrat je bil klican določen API knjižnice.

Da bi razumeli, zakaj potrebujemo akumulatorje, si oglejmo majhen primer.



Tukaj je namišljen dnevnik transakcij verige trgovin po osrednji regiji Kolkata.

logs-Spark-accumulators

Obstajajo 4 polja,

Polje 1 -> Mesto



kako dvigniti nekaj do moči v javi

Polje 2 -> Kraj

Polje 3 -> Kategorija prodanega predmeta

Polje 4 -> Vrednost prodanega predmeta

Dnevniki pa so lahko poškodovani. Na primer, druga vrstica je prazna vrstica, četrta vrstica poroča o nekaterih težavah z omrežjem in nazadnje zadnja vrstica prikazuje prodajno vrednost nič (kar se ne more zgoditi!).

Z akumulatorji lahko analiziramo dnevnik transakcij, da ugotovimo število praznih dnevnikov (prazne vrstice), število izpadov omrežja, kateri koli izdelek, ki nima kategorije ali celo število zabeleženih ničelnih prodaj. Celoten dnevnik vzorcev je na voljo tukaj .
Akumulatorji se uporabljajo za vse operacije, ki so,
1. Komutativno -> f (x, y) = f (y, x) , in
2. Asociativni -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Na primer, vsota in maks funkcije izpolnjujejo zgornje pogoje, medtem ko povprečno ne.

Zakaj uporabljati akumulatorje Spark?

Zakaj zdaj rabimo akumulatorje in zakaj ne uporabljamo samo spremenljivk, kot je prikazano v spodnji kodi.

Težava z zgornjo kodo je, da ko gonilnik natisne spremenljivko blankLines njegova vrednost bo enaka nič. To je zato, ker ko Spark pošlje to kodo vsakemu izvršitelju, spremenljivke postanejo lokalne za tega izvajalca in njegova posodobljena vrednost ni posredovana nazaj gonilniku. Da bi se izognili tej težavi, jo moramo narediti blankLines akumulator, tako da se vse posodobitve te spremenljivke pri vsakem izvajalcu posredujejo nazaj gonilniku. Torej je treba zgornjo kodo napisati kot,

To zagotavlja, da akumulator blankLines se posodobi pri vsakem izvršitelju, posodobitve pa se pošljejo nazaj gonilniku.

Lahko uporabimo druge števce za napake v omrežju ali ničelno prodajno vrednost itd. Celotno izvorno kodo lahko najdete skupaj z implementacijo drugih števcev tukaj .

Ljudje, ki poznajo Hadoop Map-Reduce, bodo opazili, da so Sparkovi akumulatorji podobni Hadoopovim števcem Map-Reduce.

Opozorila

Pri uporabi akumulatorjev obstaja nekaj opozoril, ki se jih moramo kot programerji zavedati,

  1. Izračuni znotraj preobrazbe se ocenjujejo lenobno, zato razen če ukrepanje zgodi na RDD preobrazbe se ne izvršijo. Kot rezultat tega imajo akumulatorji, ki se uporabljajo znotraj funkcij, kot so zemljevid() ali filter () ne bodo usmrčeni, razen če nekateri ukrepanje zgodijo na RDD.
  2. Spark zagotavlja posodobitev akumulatorjev znotraj dejanja Samo enkrat . Torej, tudi če se opravilo znova zažene in se rod ponovno izračuna, se akumulatorji posodobijo le enkrat.
  3. Spark tega ne zagotavlja preobrazbe . Torej, če se opravilo znova zažene in se rod ponovno izračuna, obstaja verjetnost neželenih stranskih učinkov, ko bodo akumulatorji posodobljeni več kot enkrat.

Da bi bili na varni strani, vedno znotraj akcij uporabljajte SAMO akumulatorje.
Koda tukaj prikazuje preprost, a učinkovit primer, kako to doseči.
Za več informacij o akumulatorjih preberite to .

Imate vprašanje za nas? Omenite jih v oddelku za komentarje in javili se vam bomo.

Sorodne objave:

Apache Spark kombinacijaByKey Explained