Apache Spark optimization Techniques and Performance Tuning

By Chandan Gaur|Big Data Engineering / 05,Oct,2020

What is Apache Spark?

Apache kuvaili vuonna 2012 Resilient Distributed Dataset (RDD in Apache Spark)-säätiötä, jossa on vain luettavia hajautettuja tietokokonaisuuksia hajautetuista klustereista, ja nimesi sen Apache Sparkiksi. Myöhemmin, he ottavat käyttöön Dataset API ja sitten Dataframe API erän ja jäsennelty streaming tietoa. Tässä artikkelissa luetellaan parhaat Apache kipinä optimointi tekniikoita.

Apache Spark on nopea klusterilaskenta-alusta, joka on kehitetty useampien laskutoimitusten ja streaminkäsittelyn suorittamiseen. Spark pystyy käsittelemään monenlaisia työmääriä verrattuna perinteisiin järjestelmiin, joiden pyörittäminen ja tukeminen vaatii useita järjestelmiä. Tietojen analysointiputkia helpottaa tuotannon kannalta tarpeellinen kipinä erilaisten käsittelytyyppien yhdistämisessä. Apache Spark luodaan toimimaan ulkoisen klusteriohjaimen, kuten langan tai sen erillisen johtajan kanssa.

Apache Sparkin piirteitä

joitakin Apache Sparkin piirteitä ovat:-

  • yhtenäinen alusta Big data-sovellusten kirjoittamiseen.
  • kehityksen helppous.
  • suunniteltu helposti saavutettavaksi.
  • kipinä voi toimia itsenäisesti. Näin se antaa joustavuutta.
  • Kustannustehokas.

XenonStack tarjoaa analytiikkapalveluja ja-ratkaisuja reaaliaikaiseen ja virtaavaan tiedon nielemiseen, käsittelyyn ja analysointiin nopeasti ja tehokkaasti esineiden internetiä, seurantaa, ennaltaehkäisevää ja ennakoivaa ylläpitoa varten.

artikkelista, Streaming-ja reaaliaikaisista Analytiikkapalveluista

ymmärrätkö miten Apache Spark Optimization toimii?

ymmärtääkseen, miten Apache Spark optimointi toimii, sinun täytyy ymmärtää sen arkkitehtuuri ensin ja seuraavassa osassa, kehitämme samaa.

Apache Spark-arkkitehtuuri

Spark –ajuri (Master Process) koostuu kolmesta osasta –

Spark-ajuri (Master Process)

Spark-ajuri muuntaa ohjelmat tehtäviksi ja ajoittaa tehtävät suorittajille. Tehtävien ajoitus on kuljettajan osa ja auttaa jakamaan tehtäviä suorittajille.

Spark Cluster Manager

cluster manager on Sparkissa ydin, jonka avulla voidaan käynnistää suorittajia ja joskus myös ajureita. Spark Scheduler ajoittaa Spark-sovelluksen toiminnot ja työt FIFO – tavalla itse klusterinhallinnassa. Kannattaa lukea myös Apache Airflow ’ sta.

toimeenpanijat (Orjaprosessit)

toimeenpanijat ovat niitä yksittäisiä kokonaisuuksia, joilla työn yksilöllinen tehtävä kulkee. Täytäntöönpanijat toimivat aina kipinäsovelluksen elinkaareen asti, kun ne on käynnistetty. Epäonnistuneet suorittajat eivät lopeta kipinätyön toteuttamista.

RDD (Resilient Distributed Datasets)

An RDD on hajautettu kokoelma muuttumattomia aineistoja klusterin hajautetuista solmukohdista. RDD on jaettu yhteen tai useampaan osioon. RDD on ydin kipinä niiden jakautuminen eri solmujen klusterin, joka hyödyntää tietojen paikkakunnan. Yhdensuuntaisuuden saavuttamiseksi sovelluksen sisällä osiot ovat sen yksiköitä. Repartitionilla tai coalesce-muunnoksilla voidaan ylläpitää osioiden määrää. Tiedonsaanti on optimoitu RDD: n sekoittamista hyödyntäen. Koska Spark on lähellä dataa, se lähettää dataa eri solmujen läpi ja luo tarvittavat osiot tarpeen mukaan.

DAG (Directed Acyclic Graph)

Spark pyrkii luomaan operaattorigraafin, kun syötämme koodimme Spark Consolelle. Kun toiminto käynnistetään Spark RDD: lle, Spark toimittaa kyseisen kaavion dagschedulerille. Se sitten jakaa nämä operaattori kaaviot vaiheisiin tehtävän sisällä DAGScheduler. Jokainen vaihe voi sisältää tehtäviä, jotka perustuvat useampaan tulevan tiedon osioon. Dagscheduler putkistot yksittäisten operaattorin kaavioita yhdessä. Esimerkiksi, kartta operaattori kaaviot aikataulu yhden vaiheen ja nämä vaiheet siirtää. Tehtävien ajoitus klusterinhallinnassa niiden suorittamista varten. Tämä on työn tai toimeenpanijoiden tehtävä suorittaa nämä tehtävät orjalla.

hajautettu käsittely käyttäen osioita tehokkaasti

klustereiden suorittajien määrän lisääminen lisää myös rinnakkaisuutta prosessoinnin Kipinätyössä. Mutta tätä varten on oltava riittävät tiedot siitä, miten nämä tiedot jaettaisiin näiden täytäntöönpanijoiden kesken osioinnin kautta. RDD on hyödyllinen tässä tapauksessa, jossa on vähäinen liikenne tietojen sekoittamiseksi näiden suorittajien välillä. Yksi voi muokata osiointi pari RDD (RDD avain-arvo paria). Spark vakuuttaa, että joukko avaimia ilmestyy aina yhteen samaan solmuun, koska tässä tapauksessa ei ole nimenomaista kontrollia.

Apache Spark security auttaa tunnistautumaan jaetun salaisuuden kautta. Kipinätodennus on konfiguraatioparametri, jonka kautta todennus voidaan määrittää. Se on parametri, joka tarkistaa, tekevätkö kipinäviestinnän protokollat todennuksen jaetun salaisuuden avulla vai eivät.

artikkelista Apache Spark Security

virheet, joita vältetään kirjoitettaessa Kipinäsovelluksia

reduceByKey tai groupByKey

sekä groupByKey että reduceByKey tuottavat saman vastauksen, mutta käsite tuottaa tuloksia on erilainen. reduceByKey sopii parhaiten suurille tietokokonaisuuksille, koska Sparkissa se yhdistää tulosteen jaetun avaimen jokaiselle osiolle ennen tietojen sekoittamista. Toisella puolella groupByKey sekoittaa kaikki avainarvoparit. GroupByKey aiheuttaa tarpeettomia sekoituksia ja tiedonsiirtoa verkon yli.

säilytä vaadittu sekoituslohkojen koko

oletuksena, kipinä-sekoituslohko ei saa ylittää 2 Gt: tä. Parempi käyttö on lisätä osioita ja vähentää sen kapasiteettia ~128MB osiota kohti, joka vähentää shuffle block kokoa. Voimme käyttää repartition tai coalesce säännöllisesti sovelluksia. Suuret osiot tekevät prosessista hidasta, koska raja on 2GB, ja harvat osiot eivät salli skaalata työtä ja saavuttaa rinnakkaisuus.

tiedostomuodot ja erotin

oikeiden tiedostomuotojen valitseminen jokaiseen dataan liittyvään spesifikaatioon on päänsärky. Yksi on valittava viisaasti tietojen muodossa nieleminen tyypit, väli tyyppi, ja lopullinen lähtö tyyppi. Voimme myös luokitella kunkin tyypin tiedostomuodot useilla tavoilla, kuten voimme käyttää Avro-tiedostomuotoa mediatietojen tallentamiseen, sillä Avro on parhaiten optimoitu binääridatalle kuin parketti. Parkettia voidaan käyttää metatietojen tallentamiseen, koska se on erittäin pakattu.

Pienet datatiedostot

Broadcasting on tekniikka, jolla Ladataan pieniä datatiedostoja tai tietokokonaisuuksia Muistilohkoiksi, jotta ne voidaan yhdistää massiivisempiin datakokonaisuuksiin, joiden yläpuolella on vähemmän sekoittuvaa dataa. Esimerkiksi, voimme tallentaa pieniä tiedostoja n lohkojen määrä ja suuria tiedostoja voidaan liittää näihin datalohkojen tulevaisuudessa suuria tiedostoja voidaan jakaa näiden lohkojen rinnakkain tavalla.

työvaiheiden seuranta

DAG on Sparkissa käytetty tietorakenne, joka kuvaa tehtävien eri vaiheita Graafimuodossa. Suurin osa kehittäjistä kirjoittaa ja toteuttaa koodia, mutta työtehtävien seuranta on välttämätöntä. Seuranta onnistuu parhaiten DAG: n johtamisella ja vaiheiden vähentämisellä. 20 askeleen työ on pitkähköä verrattuna 3-4 vaiheen työhön.

ByKey, repartition tai muut operaatiot, jotka käynnistävät shuffles

useimmat kerrat meidän täytyy välttää shuffles niin paljon kuin voimme, koska data shuffles läpi monia, ja joskus se tulee hyvin monimutkainen saada skaalautuvuus ulos näistä shuffles. GroupByKey voi olla arvokas voimavara, mutta sen tarve on kuvattava ensin.

vahvistaminen oppiminen

vahvistaminen oppiminen ei ole vain käsite paremman Koneoppimisympäristön saavuttamiseksi, vaan myös päätösten prosessoimiseksi paremmin. Sparkissa on sovellettava syvävahvistusoppimista, jos siirtymämalli ja palkitsemismalli on rakennettu oikein datajoukoille ja myös agentit ovat riittävän kyvykkäitä arvioimaan tuloksia.

Apache Spark Optimization Factors and Techniques

yksi Apache Spark optimoinnin parhaista ominaisuuksista on se, että se auttaa muistitietojen laskennassa. Näiden kipinäoptimointilaskentojen pullonkaula voi olla suoritin, muisti tai mikä tahansa klusterin resurssi. Tarve sarjallistaa tiedot, vähentää muistia voi syntyä tällaisissa tapauksissa. Nämä kipinän optimoinnin tekijät, jos niitä käytetään oikein, voivat–

  • eliminoida pitkään jatkunut työprosessi
  • korjauksen suoritusmoottori
  • parantaa suoritusaikaa hallinnoimalla resursseja

13 Apachen Kipinäoptimoinnin

Yksinkertaiset tekniikat ovat suorittajille globaaleja muuttujia, joita voidaan lisätä vain assosiatiivisella ja kommutatiivisella operaatiolla. Se voi siis olla samanaikaisesti tehokas. Akuilla voidaan toteuttaa laskureita (sama kuin Map Reductionissa) tai jokin muu tehtävä, kuten API-puhelujen seuranta.

oletuksena Spark tukee numeerisia akkuja, mutta ohjelmoijilla on etu lisätä tuki uusille tyypeille. Spark varmistaa, että kunkin tehtävän päivitys tehdään vain kerran kertymämuuttujille. Muutosten aikana käyttäjien tulisi olla tietoisia kunkin tehtävän päivityksestä, koska niitä voidaan soveltaa useammin kuin kerran, jos työvaiheet suoritetaan uudelleen.

pesän Bucketing-suorituskyky

Bucketing-tulokset kiinteällä tiedostojen määrällä, kuten määritämme ämpärillä varustettujen kauhojen määrän. Hive otti pellon, laski hasiksen ja antoi tietueet sille ämpärille. Bucketing on vakaampi, kun kenttä on korkea kardinaalisuus, Suuri tietojenkäsittely, ja tietueet jakautuvat tasaisesti kaikkien kauhat taas osiointi toimii, kun osiointikentän kardinaalisuus on alhainen.

Bucketing vähentää tiedostojen lajittelun yleiskustannuksia. Jos esimerkiksi liitymme kahteen taulukkoon, joissa on yhtä monta ämpäriä, spark liittää tiedot suoraan avaimiksi jo lajiteltuihin ämpäreihin. Ämpäritiedostojen määrä voidaan laskea useina osioina useiksi ämpäreiksi.

Predikaattipunnerrusoptimointi

Predikaattipunnerrus on tekniikka, jolla käsitellään vain vaaditut tiedot. Predikaatteja voidaan soveltaa SparkSQL: ään määrittelemällä suodattimet missä olosuhteissa. Käyttämällä selitä-komentoa kyselyyn voimme tarkistaa kyselyn käsittelyn vaiheet. Jos kyselyn suunnitelma sisältää PushedFilter kuin kysely on optimoitu valita Vain tarvittavat tiedot, koska jokainen predikaatti palauttaa joko tosi tai epätosi.

Jos Kyselysuunnitelmassa ei ole Pushedfilteriä, parempi on heittää missä kunnossa. Predikaatti Pushdowns rajoittaa tiedostojen ja osioiden määrää, joita SparkSQL lukee kyselyssä, mikä vähentää levyn I / O käynnistymistä muistissa. Tietojen kyseleminen kauhoissa predikaattipunnerruksilla tuottaa tuloksia nopeammin vähemmällä sekoituksella.

Zero Data Serialization / Deserialization käyttäen Apache Arrow

Apache Arrow ’ ta käytetään analyyttisten kyselymoottoreiden Muistiajoformaattina. Arrow tarjoaa tietojen serialization / deserialization zero shuffles kautta jaetun muistin. Arrow flight lähettää suuret tietokokonaisuudet verkon yli. Arrowilla on arrow-tiedostomuoto, joka mahdollistaa nolla-kopioisen satunnaisen pääsyn levyillä oleviin tietoihin. Arrowissa on standardi tiedonsiirtokerros kaikille spark-sovelluksille.

Se vähentää SerDe-operaatioiden overhead-arvoa tietojen sekoittamisessa, koska sillä on yhteinen paikka, jossa kaikki data on ja jossa se on arrow-muodossa.

roskien Keräysviritys käyttäen G1GC-kokoelmaa

kun viritetään roskien kerääjiä, suosittelemme ensin käyttämään G1 GC: tä Kipinäsovellusten ajamiseen. G1-jätteenkerääjä käsittelee täysin kasvukasoja, joita on yleisesti nähty kipinän kanssa. G1: llä tarvitaan vähemmän vaihtoehtoja sekä suuremman läpimenon että pienemmän latenssin tarjoamiseksi. Hallita arvaamattomia ominaisuuksia ja käyttäytymistä eri sovellusten GC viritys on hallittava mukaan syntyy lokit.

tätä ennen on sovellettava muita optimointitekniikoita, kuten suoratoisto-ja reaaliaikaisia Analytiikkaratkaisuja, ohjelman logiikassa ja koodissa. Suurimman osan ajasta, G1GC auttaa optimoimaan tauko aikaa prosessien välillä, jotka ovat melko usein Kipinäsovelluksissa, mikä vähentää työn suoritusaika luotettavampi järjestelmä.

muistinhallinta ja viritys

koska tiedämme, että laskutoimituksissa, kuten sekoittamisessa, lajittelussa ja niin edelleen, käytetään Suoritusmuistia, kun taas välimuistitarkoituksiin käytetään tallennusmuistia, joka myös lisää sisäistä dataa. Saattaa olla tapauksia, joissa työt eivät käytä mitään välimuistia; siksi tapauksissa pois tilaa virhe suorituksen aikana. Välimuistissa olevissa töissä on aina vähemmän tallennustilaa, jos Tietoja ei saa häätää millään suoritusvaatimuksella. Lisäksi Apache Sparkilla voi tehdä reaaliaikaisen suoratoistosovelluksen.

voimme asettaa kipinän.muisti.fraktio määrittää, kuinka paljon JVM heap-tilaa käytetään Spark-suoritusmuistiin. Yleensä 60% on oletusarvo. Executor muisti on säilytettävä mahdollisimman vähemmän, koska se voi johtaa viivästyminen JVM Roskankeräys. Tämä seikka koskee myös pieniä toteuttajia, koska useita tehtäviä voi suorittaa yhdellä JVM-instanssilla.

Data Locality

Apache Sparkissa Käsittelytehtävät optimoidaan sijoittamalla suorituskoodi lähelle käsiteltyä dataa, jota kutsutaan data localityksi. Joskus käsittelytehtävän on odotettava ennen tietojen saamista, koska tietoja ei ole saatavilla. Kuitenkin, kun aika kipinä.paikkakunta.odota päättyy, kipinä yrittää vähemmän paikallistasolla, eli, paikallinen solmu telineeseen tahansa.

tiedon siirtäminen levyjen välillä on erittäin kallista, joten suurin osa operaatioista on suoritettava paikassa, jossa data sijaitsee. Se auttaa lataamaan vain pientä, mutta vaati tietomäärän yhdessä testivetoisen kehityksen Apache Sparkille.

yhteenliittymien käyttäminen

yhteenliittymät tekevät päätöksiä uudelleenjaosta ja lähetyksistä. Voimme määritellä pieniä tietokokonaisuuksia, jotka sijoitetaan useisiin muistilohkoihin yleisradiotoiminnan paremman käytön saavuttamiseksi. Kun haet liitoksia kahteen tietojoukkoon, Spark lajittelee ensin molempien tietokokonaisuuksien tiedot avaimen mukaan ja ne yhdistyvät.

mutta, voimme myös soveltaa Lajittele partition-avainta ennen liittymistä niihin tai luodessamme näitä tietokehyksiä Apache Arrow-arkkitehtuurissa. Tämä optimoi kyselyn suoritusajan, koska ei olisi tarpeettomia funktiokutsuja lajitella.

välimuistin tallentaminen Sparkissa

välimuistin tallentaminen Apache Sparkissa GPU: lla on paras tekniikka Apache Spark-optimointiin, kun tarvitsemme dataa uudelleen ja uudelleen. Mutta se ei aina ole hyväksyttävää välimuistiin tietoja.

meidän on käytettävä välimuistia () RDD: tä ja Dataframesia seuraavissa tapauksissa–

  • kun on iteratiivinen silmukka, kuten koneoppimisen algoritmeissa.
  • kun RDD: tä käytetään useita kertoja yhdessä työssä tai tehtävässä.
  • kun RDD-osioiden tuottaminen uudelleen on kalliimpaa.

Cache () ja continue (StorageLevel.MEMORY_ONLY) voidaan käyttää toistensa sijasta. Jokainen RDD-osio, joka saa häädön pois muistista, on rakennettava uudelleen lähteestä, joka on edelleen erittäin kallis. Yksi parhaista ratkaisuista on käyttää säilyvää (varastotasoa.MEMORY_AND_DISK_ONLY), joka läikyttäisi RDD: n osiot työntekijän paikalliselle levylle. Tämä tapaus edellyttää vain tietojen saamista työntekijän paikallisajosta, joka on suhteellisen nopea.

toimeenpanijan koko

kun suoritamme suorittajia, joilla on korkea muisti, se johtaa usein kohtuuttomiin viivästyksiin roskien keräämisessä. Meidän täytyy pitää ydinten määrä per toimeenpanija alle viisi tehtävää per toimeenpanija. Liian pienet toimeenpanijat eivät tulleet ulos kätevä kannalta käynnissä useita työpaikkoja yhden JVM.

esimerkiksi lähetysmuuttujat on toistettava jokaiselle suorittajalle täsmälleen kerran, jolloin tiedoista tulee useampia kopioita.

Spark Windowing-funktio

ikkunafunktio määrittelee kehyksen, jonka kautta voidaan laskea taulukon syöttörivit. Yksittäisellä rivitasolla. Jokaisella rivillä voi olla selkeä kehys. Windowing avulla voimme määritellä ikkunan tietojen kehyksessä. Voimme verrata useita rivejä samassa datakehyksessä.

voimme asettaa ikkunan ajan tietylle aikavälille, joka ratkaisee datariippuvuuden ongelman aiemman datan kanssa. Laahustaminen Apache-säteellä on vähemmän aiemmin käsiteltyjä tietoja, koska säilytämme nämä tiedot ikkunan välein.

vesileimatekniikka

vesileimaus on Apache Spark-optimoinnissa hyödyllinen tekniikka, joka rajoittaa järjestelmää rakenteeltaan ja auttaa estämään sen räjähtämisen ajon aikana. Vesileima vaatii kaksi argumenttia–

  • sarake tapahtuma-aika ja
  • kynnysaika, joka määrittää, kuinka kauan meidän on käsiteltävä myöhäisiä tietoja

Apache Arrow-arkkitehtuurin kysely päivittyy automaattisesti, jos tiedot jäävät kyseisen kynnyksen alle; muussa tapauksessa viivästyneitä tietoja ei käsitellä. On muistettava, että voimme käyttää Complete-tilassa rinnakkain vesileimaamalla koska full mode ensin jatkuu kaikki tiedot tuloksena taulukkoon.

datan sarjallistaminen

Apache Spark optimointi toimii datalla, jota joudumme käsittelemään joissakin käyttötapauksissa, kuten analytiikassa tai vain datan siirtämisessä. Tämä datan tai analytiikan siirto voidaan suorittaa hyvin, jos data on jossain parempisarjaisessa muodossa. Apache Spark tukee tietojen serialization hallita tietojen formaatteja tarvitaan lähde tai kohde tehokkaasti. Oletusarvoisesti Apache Spark käyttää Java-sarjasijoitusta, mutta tukee myös Kryo-sarjasijoitusta.

oletuksena Spark käyttää Javan Objectoutputstreamia tietojen sarjallistamiseen. Toteutus voi tapahtua Javan kautta.lo.Sarjamuotoista luokkaa. Se koodaa kohteet tavuvirraksi. Se tarjoaa kevyt pysyvyys ja joustava. Mutta se tulee hidas, koska se johtaa valtava serialized formaatteja kunkin luokan sitä käytetään. Spark tukee Kryo Serialization library (v4) sarjaistamiseen esineitä lähes 10x nopeammin kuin Java Serialization koska se on kompaktimpi kuin Java.

Apassikipinän Optimointi: Kattava lähestymistapa

Apache Spark, avoimen lähdekoodin hajautettu laskentamoottori, on tällä hetkellä suosituin kehys muistin eräkäsittelylle, joka tukee myös reaaliaikaista suoratoistoa. Apache Spark Optimizer-ja execution engine-tekniikan avulla voidaan käsitellä ja analysoida suuria tietokokonaisuuksia erittäin tehokkaasti. Kuitenkin käynnissä Apache kipinä liittyä optimointi tekniikoita ilman huolellista viritystä voi heikentää suorituskykyä. Jos haluat valjastaa Apache Spark-Sovellustehosi, tutustu hallinnoituihin Apache Spark-palveluihimme.

luokat :

Big Data Development, Big Data Solutions, Streaming Data Analytics,

Jaa:

You might also like

Vastaa

Sähköpostiosoitettasi ei julkaista.