Tietojenkäsittelyn parantaminen Spark 3.0: n ja Delta Laken avulla

Lähdesolmu: 1013539

Kerää, käsittelee ja suorittaa analyysejä tietojen suoratoisto, teollisuuden aloilla, kuten ad-tech, liittyy intensiivistä tietotekniikkaa. Päivittäin tuotettava data on valtava (100 s gigatavua) ja vaatii huomattavan käsittelyajan tietojen käsittelemiseksi seuraavissa vaiheissa.

Toinen haaste on tietojoukkojen yhdistäminen oivallusten saamiseksi. Jokaisessa prosessissa on keskimäärin yli 10 tietojoukkoa ja sama määrä liittymiä useilla avaimilla. Osion koko kullekin avaimelle on arvaamaton jokaisessa ajossa.

Ja lopuksi, jos tietomäärä ylittää tietyissä tilanteissa, muisti saattaa loppua. Tämä tarkoittaa sitä, että prosessi kuolisi lopullisten kirjoitusten keskelle, jolloin kuluttajat lukisivat selvästi syöttötietokehykset.

Tässä blogissa käsittelemme yleiskatsausta Delta -järvet, sen edut ja miten edellä mainitut haasteet voidaan voittaa siirtymällä Delta -järvelle ja siirtymällä Spark 3.0: een Spark 2.4: stä. 

Mikä on Delta -järvi?

Databricksissa kehitetty Delta Lake on avoimen lähdekoodin tietojen tallennuskerros, joka toimii olemassa olevassa Data Lakessa ja on täysin yhteistyössä Apache Spark Sovellusliittymät. Sen lisäksi, että Delta Lakes pystyy toteuttamaan ACID -tapahtumia ja skaalautuvaa metatietojen käsittelyä, se voi myös yhdistää suoratoiston ja erätietojen käsittelyn ”. 

Delta Lake käyttää versioituja parketitiedostoja tietojen tallentamiseen pilveen. Kun pilvisijainti on määritetty, Delta Lake seuraa kaikkia taulukkoon tai blob -säilöön tehtyjä muutoksia ACID -tapahtumien tarjoamiseksi. 

Delta -järvien käytön edut 

Delta -järven avulla tuhansia tietoja voidaan ajaa rinnakkain, käsitellä optimointi- ja osiohaasteita, nopeuttaa metatietotoimintoja, ylläpitää tapahtumalokia ja päivittää tietoja jatkuvasti. Alla keskustelemme muutamista tärkeistä eduista: 

Delta -järven tapahtumaloki

Delta-järven tapahtumalokit ovat vain liitetiedosto, ja ne sisältävät tilatun tietueen kaikista Delta Lake -taulukossa suoritetuista tapahtumista. Tapahtumalokin avulla eri käyttäjät voivat lukea ja kirjoittaa taulukkoon rinnakkain. Se toimii yhtenä totuuden lähteenä tai keskusvarastoina, joka kirjaa kaikki käyttäjän taulukkoon tekemät muutokset. Se ylläpitää atomisuutta ja seuraa jatkuvasti Delta -järvellä suoritettuja tapahtumia.

Kuten edellä mainittiin, Spark tarkistaa delta -lokin uusien tapahtumien varalta, minkä jälkeen Delta Lake varmistaa, että käyttäjän versio on aina synkronoitu master -tietueen kanssa. Se myös varmistaa, että taulukkoon ei tehdä ristiriitaisia ​​muutoksia. Jos prosessi kaatuu ennen delta -lokin päivittämistä, tiedostot eivät ole kaikkien lukuprosessien käytettävissä, koska lukemat käyvät aina tapahtumalokin läpi.

Tapahtumalokin työ ja atomisitoumukset

Delta -järvi tekee tarkastuspisteen joka kymmenestä sitoumuksesta. Tarkistettu tiedosto sisältää tietojen nykyisen tilan Parquet -muodossa, joka voidaan lukea nopeasti. Kun useat käyttäjät yrittävät muokata taulukkoa samanaikaisesti, Delta Lake ratkaisee ristiriidat käyttämällä optimistista samanaikaisuuden hallintaa.

Metatietojen malli on seuraava: 

SarakeTyyppiKuvaus
muotojonoTaulukon muoto, eli "delta".
idjonoTaulukon yksilöllinen tunnus
nimijonoTaulukon nimi sellaisena kuin se on määritetty metavarastossa
kuvausjonoTaulukon kuvaus.
sijaintijonoPöydän sijainti
luotuAtaikaleimaKun taulukko luotiin
viimeksi muokattuaikaleimaMilloin taulukkoa on viimeksi muokattu
osioColumnsjoukko jousiaOsioiden sarakkeiden nimet, jos taulukko on osioitu
numFilespitkäTaulukon uusimman version tiedostojen määrä
ominaisuudetMerkkijono-karttaKaikki taulukon ominaisuudet on asetettu
minReaderVersionintMinimiversio lukijoista (lokiprotokollan mukaan), jotka voivat lukea taulukon.
minWriterVersionintPienin versio lukijoista (lokiprotokollan mukaan), jotka voivat kirjoittaa taulukkoon.
Lähde: GitHub

Lisää ja poista tiedosto

Aina kun tiedosto lisätään tai olemassa oleva tiedosto poistetaan, nämä toiminnot kirjataan. Tiedoston polku on ainutlaatuinen ja sitä pidetään ensisijaisena avaimena sen sisällä olevien tiedostojen joukolle. Kun uusi tiedosto lisätään taulukossa jo olevaan polkuun, tilastot ja muut polun metatiedot päivitetään edellisestä versiosta. Samoin poistotoiminto osoitetaan aikaleimalla. Poistotoiminto pysyy taulukossa hautakivinä, kunnes se on vanhentunut. Hautakivi vanhenee, kun TTL (Time-To-Live) ylittää.

Koska tietyn Delta -tiedoston toimintoja ei taata soveltaa järjestyksessä, se ei kelpaa useille tiedostoille, joilla on sama polku, samassa versiossa.

DataChange -merkintä joko lisäyksessä tai poistossa voidaan asettaa arvoon false, jotta minimoidaan samanaikaiset toimintaristiriidat.

Lisäystoiminnon malli on seuraava:

Kenttä nimiTietotyyppiKuvaus
polkujonoSuhteellinen polku taulukon juuresta tiedostoon, joka lisätään taulukkoon
osioarvotKartta [Jono, Jono]Kartta osio -sarakkeesta tämän tiedoston arvoon. 
kokoPitkätTämän tiedoston koko tavuina
muokkausaikaPitkätTämän tiedoston luomisaika millisekunteina aikakauden jälkeen
dataChangebooleanJos epätosi, tiedoston on oltava jo taulukossa tai lisätyn tiedoston tietueet on sisällytettävä yhteen tai useampaan poistotoimintoon samassa versiossa
tilastotTilastorakenneSisältää tilastot (esim. Määrä, sarakkeiden min/max -arvot) tämän tiedoston tiedoista
tunnisteetKartta [Jono, Jono]Kartta, joka sisältää metatietoja tästä tiedostosta

Poistotoiminnon kaava on seuraava:

Kenttä nimiPäiväys TyyppiKuvaus
polkujonoAbsoluuttinen tai suhteellinen polku tiedostoon, joka on poistettava taulukosta
poistoaikaleimapitkäPoistamisaika esitettiin millisekunteina aikakauden jälkeen
dataChangebooleanJos se on epätosi, poistetun tiedoston tietueet on sisällytettävä yhteen tai useampaan tiedoston lisäystoimintoon samassa versiossa
expandFileMetadatabooleanKun tosi, kentät partitionValues, koko ja tunnisteet ovat läsnä
osioarvotKartta [Jono, Jono]Kartta osio -sarakkeesta tämän tiedoston arvoon. Katso myös osion arvon sarjoitus
kokoPitkätTämän tiedoston koko tavuina
tunnisteetKartta [Jono, Jono]Kartta, joka sisältää metatietoja tästä tiedostosta
Lähde: GitHub

Metatietojen kaavio sisältää tiedoston polun jokaisessa lisäys-/poistotoiminnassa, eikä Spark -lukuprosessin tarvitse suorittaa täydellistä skannausta tiedostojen saamiseksi.

Jos kirjoitus epäonnistuu päivittämättä tapahtumalokia, koska kuluttajan lukema käy aina läpi metatiedot, nämä tiedostot ohitetaan. 

Spark 3.0: een siirtymisen edut

Sen lisäksi, että hyödynnetään Delta Laken etuja, siirtyminen Spark 3.0: een paransi tietojenkäsittelyä seuraavilla tavoilla:

Vino liitoksen optimointi

Tietojen vääristyminen on tila, jossa taulukon tiedot jakautuvat epätasaisesti klusterin osioiden kesken ja voivat heikentää vakavasti kyselyiden suorituskykyä, erityisesti liitoksissa. Vinous voi johtaa äärimmäiseen epätasapainoon klusterissa, mikä pidentää tietojen käsittelyaikaa.

Tietojen vääristymisehto voidaan käsitellä pääasiassa kolmella tavalla.

  1. Käyttämällä kokoonpanoa ”spark.sql.shuffle.partitions” paremman rinnakkaisuuden saavuttamiseksi tasaisemmin jakautuneessa datassa.
  2. Lähetyksen hajautuskynnyksen nostaminen käyttämällä kokoonpanoa spark.sql.autoBroadcastJoinThreshold taulukon maksimikokoon tavuina, joka on lähetettävä kaikille työsolmuille yhdistämisen aikana.
  3. Avainsuolaus (lisää etuliite vääristyneisiin näppäimiin, jotta sama avain eroaa toisistaan ​​ja säädä sitten tietojen jakautumista).

Spark 3.0 on lisännyt ajonaikaisten tilastotietojen mukaisen optimoinnin automaattiseen vinoon liittymiseen uuden mukautuvan suorituskehyksen avulla.

Vino osio

Spark 2.4: n edellisessä versiossa esiintyneellä vinojen osioiden haasteella oli valtava vaikutus tietyn tehtävän verkkoaikaan ja suoritusaikaan. Lisäksi menetelmät sen käsittelemiseksi olivat enimmäkseen manuaalisia. Spark 3.0 voittaa nämä haasteet.

Väärä osio vaikuttaa verkkoliikenteeseen ja tehtävän suoritusaikaan, koska tässä tehtävässä on paljon enemmän käsiteltävää dataa. Sinun on myös tiedettävä, miten tämä vaikuttaa kyberturvallisuuteen, koska hakkerit hyödyntävät verkkoliikenteen määrää.

Vino liitoksen osio lasketaan ajonaikaisten karttojen tilastojen datan koon ja rivien lukumäärän perusteella.

Optimointi

Mukautettu: Apache Spark Jira

Yllä olevasta taulukosta Dataframe -kampanjat liittyvät Dataframe -organisaatioihin. Yksi organisaatioiden osioista (osio 0) on suuri ja vinossa. Osio 0 on tulos yhdeksästä edellisen vaiheen kartasta (Kartta-9-Kartta-0). Sparkin OptimizeSkewedJoin-sääntö jakaa osion 8: ksi ja luo sitten 3 erillistä tehtävää, joista kukin on osio osiosta 3 (kartta-0-kartta-0, kartta-2-kartta-3 ja kartta-5-kartta-6) ja liittyy Kampanjat -osioon 9. Tämä lähestymistapa aiheuttaa lisäkustannuksia lukemalla taulukon Kampanjat -osion 0, joka on yhtä suuri kuin osioiden osio taulukosta Organisaatiot.

Lopputulos

Käyttämällä Delta Lakea ja Spark 3.0: ta otimme käyttöön seuraavat tulokset mainosteknologiayritykselle:

  • Tietojen käsittelyaika lyheni 15 tunnista 5-6 tuntiin
  • 50% alennus AWS EMR -kustannuksista
  • Tietojen menetyksen ja prosessien kuoleman estäminen, joka tapahtui usein, kun järjestelmästä poistui muisti tai käsittely pysähtyi järjestelmän häiriön vuoksi
  • Valvonta- ja hälytysominaisuudet on asennettu ilmoittamaan, jos prosessi epäonnistuu
  • Suorita orkestrointi Airflow: n avulla, jotta saavutetaan täysi automaatio ja prosessien välinen riippuvuuden hallinta
Lähde: https://www.smartdatacollective.com/improving-data-processing-with-spark-3-delta-lake/

Aikaleima:

Lisää aiheesta SmartData Collective