Dzirksteļu akumulatori paskaidroti: Apache Spark

Šajā Apache Spark emuārā sīki izskaidrots Spark akumulatori. Uzziniet Spark akumulatoru lietojumu ar piemēriem. Dzirksteles akumulatori ir līdzīgi Hadoop Mapreduce skaitītājiem.

Piedalās Prithviraj Bose

Šeit ir emuārs par lietām, kas jums jāzina par Spark akumulatoriem.Ar Tā kā tā ir galvenā prasme, kuru medī lielākā daļa IT vervētāju, tās izaugsme un pieprasījums nozarē kopš tās pirmsākumiem ir bijis eksponenciāls.





Kas ir akumulatori?

Akumulatori ir mainīgie, kurus izmanto informācijas apkopošanai starp izpildītājiem. Piemēram, šī informācija var attiekties uz datiem vai API diagnozi, piemēram, cik ierakstu ir bojāti vai cik reizes tika izsaukta konkrēta bibliotēkas API.

Apskatīsim nelielu piemēru, lai saprastu, kāpēc mums ir nepieciešami akumulatori.



Lūk, iedomāts veikalu tīkla darījumu žurnāls Kolkatas centrālajā reģionā.

logs-Spark-accumulators

Ir 4 lauki,

1. lauks -> pilsēta



2. lauks -> atrašanās vieta

3. lauks -> pārdoto priekšmetu kategorija

4. lauks -> pārdotās preces vērtība

kā instalēt hadoop uz Linux

Tomēr žurnālus var sabojāt. Piemēram, otrā rinda ir tukša rinda, ceturtā rinda ziņo par dažām tīkla problēmām, un visbeidzot pēdējā rindā tiek parādīta pārdošanas vērtība nulle (kas nevar notikt!).

Mēs varam izmantot akumulatorus, lai analizētu darījumu žurnālu, lai uzzinātu tukšo žurnālu (tukšo rindu) skaitu, tīkla kļūmju skaitu, jebkuru produktu, kuram nav kategorijas, vai pat nulles pārdošanas reižu skaitu. Pilnu žurnāla paraugu var atrast šeit .
Akumulatori ir piemērojami visām darbībām,
1. Komutatīvais -> f (x, y) = f (y, x) , un
2. Asociatīvs -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Piemēram, summa un maks funkcijas atbilst iepriekšminētajiem nosacījumiem, turpretī vidēji nav.

Kāpēc izmantot Spark Accumulators?

Kāpēc mums ir nepieciešami akumulatori un kāpēc neizmantot tikai mainīgos, kā parādīts zemāk esošajā kodā.

Iepriekš minētā koda problēma ir tā, ka tad, kad draiveris izdrukā mainīgo blankLines tā vērtība būs nulle. Tas notiek tāpēc, ka tad, kad Spark nosūta šo kodu katram izpildītājam, mainīgie kļūst lokāli šim izpildītājam, un tā atjauninātā vērtība netiek pārsūtīta atpakaļ draiverim. Lai izvairītos no šīs problēmas, kas mums jāizdara blankLines akumulators tāds, ka visi šī mainīgā atjauninājumi katrā izpildītājā tiek pārsūtīti atpakaļ vadītājam. Tātad iepriekšējais kods jāraksta šādi:

Tas garantē, ka akumulators blankLines tiek atjaunināts katram izpildītājam, un atjauninājumi tiek pārsūtīti atpakaļ uz draiveri.

Mēs varam ieviest citus skaitītājus tīkla kļūdām vai nulles pārdošanas vērtībai utt. Pilnu pirmkodu kopā ar citu skaitītāju ieviešanu var atrast šeit .

Cilvēki, kuri zina Hadoop Map-Reduce, pamanīs, ka Spark akumulatori ir līdzīgi Hadoop's Map-Reduce skaitītājiem.

Brīdinājumi

Lietojot akumulatorus, ir daži iebildumi, kas mums kā programmētājiem jāzina,

  1. Aprēķini iekšā pārvērtības tiek vērtēti slinki, tāpēc, ja vien darbība notiek uz RDD pārvērtības netiek izpildīti. Tā rezultātā akumulatori, ko izmanto iekšpusē, darbojas, piemēram, karte () vai filtrs () paradis tikt izpildīts, ja vien daži darbība notiek RDD.
  2. Spark garantē akumulatoru atjaunināšanu iekšā darbības tikai vienu reizi . Tātad, pat ja uzdevums tiek restartēts un cilts ir pārrēķināta, akumulatori tiks atjaunināti tikai vienu reizi.
  3. Spark to negarantē pārvērtības . Tātad, ja uzdevums tiek atsākts un cilts tiek pārrēķināta, pastāv nevēlamu blakusparādību iespējamība, kad akumulatori tiks atjaunināti vairāk nekā vienu reizi.

Lai būtu drošībā, darbībās vienmēr izmantojiet akumulatorus TIKAI.
Kods šeit parāda vienkāršu, bet efektīvu piemēru, kā to panākt.
Plašāku informāciju par akumulatoriem lasiet šo .

Vai mums ir jautājums? Pieminiet tos komentāru sadaļā, un mēs ar jums sazināsimies.

Saistītās ziņas:

Apache Spark apvienotByKey paskaidrots