Kipinöakut selitetty: Apache Spark



Tämä Apache Spark -blogi selittää Spark-akut yksityiskohtaisesti. Opi Spark-akun käyttöä esimerkkien avulla. Kipinänakut ovat kuin Hadoop Mapreduce -laskurit.

Lähettäjä Prithviraj Bose

Tässä on blogi asioista, jotka sinun on tiedettävä Spark-akuista.Kanssa Koska se on keskeinen taito, jota useimmat IT-rekrytoijat metsästävät, sen kasvu ja kysyntä teollisuudessa on ollut eksponentiaalinen alusta lähtien.





Mitä ovat akut?

Akkumulaattorit ovat muuttujia, joita käytetään tietojen kokoamiseen toteuttajien kesken. Nämä tiedot voivat koskea esimerkiksi tietoja tai API-diagnoosia, kuten kuinka monta tietuetta on vioittunut tai kuinka monta kertaa tiettyä kirjaston sovellusliittymää kutsuttiin.

Katsotaanpa pieni esimerkki ymmärtääksemme, miksi tarvitsemme akkuja.



Tässä on kuvitteellinen loki kauppaketjun tapahtumista Keski-Kolkatan alueella.

logs-Spark-accumulators

On 4 kenttää,

miten luoda jframe

Kenttä 1 -> Kaupunki



Kenttä 2 -> sijainti

Kenttä 3 -> Myytyjen tuotteiden luokka

Kenttä 4 -> Myydyn tuotteen arvo

Lokit voivat kuitenkin vioittua. Esimerkiksi toinen rivi on tyhjä rivi, neljäs rivi raportoi joistakin verkko-ongelmista ja viimeinen rivi näyttää nollan myynti-arvon (mitä ei voi tapahtua!).

Voimme käyttää kerääjiä analysoimaan tapahtumalokia selvittääkseen tyhjien lokien (tyhjät rivit) määrän, kuinka monta kertaa verkko epäonnistui, minkä tahansa tuotteen, jolla ei ole luokkaa, tai jopa useita kertoja nollan myynnin kirjaamisen. Koko näyteloki löytyy tässä .
Akkuja voidaan soveltaa kaikkiin toimintoihin, jotka ovat
1. Kommutatiivinen -> f (x, y) = f (y, x) ja
2. Assosiatiivinen -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Esimerkiksi, summa ja enint toiminnot täyttävät edellä mainitut ehdot keskiverto ei.

Miksi käyttää kipinöintiä?

Miksi tarvitsemme sitten akkuja ja miksi ei vain käyttää muuttujia alla olevan koodin mukaisesti.

Yllä olevan koodin ongelmana on, että kun ohjain tulostaa muuttujan blankLines sen arvo on nolla. Tämä johtuu siitä, että kun Spark toimittaa tämän koodin jokaiselle toimeenpanijalle, muuttujista tulee paikallisia suorittajille, eikä sen päivitettyä arvoa välitetä takaisin kuljettajalle. Tämän ongelman välttämiseksi meidän on tehtävä blankLines akku siten, että kaikki muuttujan päivitykset jokaisessa suorittimessa välitetään takaisin ohjaimelle. Joten yllä oleva koodi tulisi kirjoittaa seuraavasti:

Tämä takaa, että akku blankLines päivitetään jokaiselle suorittajalle ja päivitykset välitetään takaisin ohjaimelle.

Voimme toteuttaa muita laskureita verkkovirheille tai nollan myynti-arvolle jne. Koko lähdekoodi ja muiden laskureiden toteutus löytyvät tässä .

Hadoop Map-Reduce -ohjelmaa tuntevat ihmiset huomaavat, että Sparkin akut ovat samanlaisia ​​kuin Hadoopin Map-Reduce-laskurit.

Varoitukset

Akkuja käytettäessä on joitain varoituksia, jotka meidän, ohjelmoijien, on oltava tietoisia,

  1. Laskelmat sisällä muunnokset arvioidaan laiskasti, joten ellei toiminta tapahtuu RDD: llä muunnokset ei suoriteta. Tämän seurauksena sisällä olevat akut toimivat kuten kartta() tai suodattaa() tapana teloitetaan, ellei joku toiminta tapahtuu RDD: ssä.
  2. Spark takaa akkujen päivityksen sisällä Toiminnot vain kerran . Joten vaikka tehtävä aloitettaisiin uudelleen ja sukulinja lasketaan uudelleen, akut päivitetään vain kerran.
  3. Spark ei takaa tätä muunnokset . Joten jos tehtävä aloitetaan uudelleen ja sukulinja lasketaan uudelleen, on olemassa ei-toivottujen sivuvaikutusten mahdollisuus, kun akkuja päivitetään useammin kuin kerran.

Turvallisuuden takaamiseksi käytä akkuja VAIN toimintojen sisällä.
Koodi tässä näyttää yksinkertaisen mutta tehokkaan esimerkin tämän saavuttamisesta.
Lisätietoja akuista, lue Tämä .

Onko sinulla kysymys meille? Mainitse ne kommenttiosassa ja palaamme sinuun.

Aiheeseen liittyvät julkaisut:

java lajittelee kokonaislukujen taulukko

Apache Spark -yhdistelmäByKey selittää