Ohjelmointi

Miksi sinun pitäisi käyttää Prestoa tilapäiseen analyysiin

Presto! Se ei ole vain loitsu herättää yleisösi taikatemppujen jälkeen, vaan myös nimi, jota käytetään yhä enemmän keskusteltaessa siitä, kuinka suurten tietojen läpi käydä läpi. Vaikka Prestossa on paljon asennuksia luonnossa, tekniikka - hajautettu SQL-kyselymoottori, joka tukee kaikenlaisia ​​tietolähteitä - on tuntematon monille kehittäjille ja data-analyytikoille, jotka voisivat hyötyä sen käytöstä.

Tässä artikkelissa keskustelen Prestosta: mikä se on, mistä se on peräisin, miten se eroaa muista tietovarastoratkaisuista ja miksi sinun pitäisi harkita sitä big data -ratkaisuissasi.

Presto vs. Hive

Presto on saanut alkunsa Facebookista vuonna 2012. Avoin hankinta vuonna 2013 ja sen hallinnoi Presto Foundation (osa Linux-säätiötä), Presto on saavuttanut tasaisen suosion nousun vuosien varrella. Nykyään useat yritykset ovat rakentaneet liiketoimintamallin Preston ympärille, kuten Ahana, PrestoDB-pohjaisten ad hoc -analytiikkatarjousten avulla.

Presto rakennettiin keinona tarjota loppukäyttäjille pääsy valtaviin tietojoukoihin tilapäisen analyysin suorittamiseksi. Ennen Prestoa Facebook käytti Hiveä (myös Facebookin rakentama ja sitten lahjoitettu Apache Software Foundationille) tällaisen analyysin suorittamiseen. Kun Facebookin tietojoukot kasvoivat, Hive havaittiin olevan riittämättömän vuorovaikutteinen (lue: liian hidas). Tämä johtui suurelta osin siitä, että Hiveen perusta on MapReduce, joka vaati tuolloin välitietojoukkojen säilyttämistä HDFS: lle. Se tarkoitti paljon I / O-levyä datalle, joka lopulta heitettiin pois.

Presto käyttää erilaista lähestymistapaa näiden kyselyjen suorittamiseen ajan säästämiseksi. Sen sijaan, että pitäisit välitietoja HDFS: llä, Presto antaa sinun vetää tiedot muistiin ja suorittaa siellä olevia tietoja sen sijaan, että kaikki välitiedot asetetaan levylle. Jos tämä kuulostaa tutulta, olet ehkä kuullut Apache Sparkista (tai mistä tahansa muusta tekniikasta siellä), joilla on sama peruskäsite MapReduce-pohjaisten tekniikoiden korvaamiseksi tehokkaasti. Prestoa käytettäessä pidän tiedot siellä, missä ne elävät (Hadoopissa tai, kuten näemme, missä tahansa) ja suoritan teloitukset muistiin hajautetussa järjestelmässä, sekoittamalla tietoja palvelinten välillä tarpeen mukaan. Vältä koskemasta mitään levyä, mikä nopeuttaa lopulta kyselyn suoritusaikaa.

Kuinka Presto toimii

Poikkeuksena perinteisestä tietovarastosta, Prestoa kutsutaan SQL-kyselyn suoritusmoottoriksi. Tietovarastot hallitsevat, miten tiedot kirjoitetaan, missä ne sijaitsevat ja miten ne luetaan. Kun saat tiedot varastoon, voi olla vaikeaa saada niitä takaisin. Presto käyttää toista lähestymistapaa irrottamalla datan tallennuksen käsittelystä samalla kun se tukee samaa ANSI SQL -kyselykieltä, johon olet tottunut.

Ytimessä Presto suorittaa kyselyjä erityisesti laajennusten tarjoamille tietojoukoille Liittimet. Liitin tarjoaa Prestolle välineet lukea (ja jopa kirjoittaa) tietoja ulkoiseen tietojärjestelmään. Hive-liitin on yksi vakioliittimistä, ja se käyttää samoja metatietoja, joita käyttäisit vuorovaikutuksessa HDFS: n tai Amazon S3: n kanssa. Tämän yhteyden ansiosta Presto korvaa Hiveä tänään käyttävät organisaatiot. Se pystyy lukemaan tietoja samoista kaavioista ja taulukoista käyttämällä samoja tietomuotoja - ORC, Avro, Parketti, JSON ja paljon muuta. Hive-liittimen lisäksi löydät liittimet Cassandralle, Elasticsearchille, Kafkalle, MySQL: lle, MongoDB: lle, PostgreSQL: lle ja monille muille. Liittimet ovat mukana Prestossa koko ajan, mikä antaa Prestolle mahdollisuuden käyttää tietoja missä tahansa.

Tämän irrotetun tallennusmallin etuna on, että Presto pystyy tarjoamaan yhden yhdistetyn näkymän kaikista tiedoistasi riippumatta siitä, missä ne sijaitsevat. Tämä nostaa ad hoc -hakujen valmiudet tasoille, joita se ei ole koskaan saavuttanut ennen, ja tarjoaa samalla interaktiivisia kyselyaikoja suurille tietojoukoillesi (kunhan sinulla on infrastruktuuri sen varmuuskopioimiseksi, paikan päällä tai pilvessä).

Katsotaanpa, miten Presto otetaan käyttöön ja miten kyselyjen suorittaminen sujuu. Presto on kirjoitettu Java-kielellä, ja siksi se vaatii JDK: n tai JRE: n käynnistymisen. Presto otetaan käyttöön kahtena pääpalveluna, yhtenä Koordinaattori ja monta Työntekijät. Koordinaattoripalvelu on käytännössä toiminnan aivot, se vastaanottaa kyselypyyntöjä asiakkailta, jäsentää kyselyn, rakentaa toteutussuunnitelman ja sitten aikatauluttaa monille Worker-palveluille tehtävän työn. Jokainen työntekijä käsittelee osan kokonaiskyselystä rinnakkain, ja voit lisätä Worker-palveluja Presto-käyttöönottoon vastaamaan tarpeitasi. Jokainen tietolähde on määritetty a luettelo, ja voit tehdä kyselyn niin monta luetteloa kuin haluat kussakin kyselyssä.

Ahana

Prestoa käytetään JDBC-ohjaimen kautta, ja se integroituu käytännöllisesti katsoen minkä tahansa työkalun kanssa, joka voi muodostaa yhteyden tietokantoihin JDBC: n avulla. Presto-komentoriviliittymä tai CLI on usein lähtökohta aloitettaessa Preston tutkimista. Joko niin, asiakas muodostaa yhteyden koordinaattoriin antamaan SQL-kyselyn. Koordinaattori jäsentää ja vahvistaa kyseisen kyselyn ja rakentaa kyselyn suoritussuunnitelman. Tämä suunnitelma kertoo kuinka Presto-työntekijät suorittavat kyselyn. Kyselysuunnitelma (yleensä) alkaa yhdellä tai useammalla taulukon skannauksella tietojen vetämiseksi ulos ulkoisista tietovarastoistasi. Sitten on joukko operaattoreita, jotka suorittavat projektioita, suodattimia, liitoksia, ryhmittelytapoja, tilauksia ja kaikenlaisia ​​muita toimintoja. Suunnitelma päättyy lopullisten tulosjoukkojen toimittamiseen asiakkaalle koordinaattorin kautta. Nämä kyselysuunnitelmat ovat välttämättömiä sen ymmärtämiseksi, miten Presto suorittaa kyselysi, sekä pystyä erittelemään kyselyn suorituskykyä ja löytämään mahdolliset pullonkaulat.

Esimerkki Presto-kyselystä

Tarkastellaan kyselyä ja sitä vastaavaa kyselysuunnitelmaa. Käytän TPC-H-kyselyä, joka on yleinen vertailutyökalu, jota käytetään SQL-tietokantoihin. Lyhyesti sanottuna TPC-H määrittelee standardin taulukot ja kyselyt SQL-kielen täydellisyyden testaamiseksi sekä keinon vertailla erilaisia ​​tietokantoja. Tiedot on suunniteltu yrityskäyttöön, ja ne sisältävät sellaisten tuotteiden myyntitilauksia, jotka voidaan tarjota suurella määrällä tarvikkeita. Presto tarjoaa TPC-H-liitännän, joka tuottaa tietoja lennossa - erittäin hyödyllinen työkalu Prestoa tarkistettaessa.

VALITSE

SUM (e. Laajennettu hinta * l. Alennus) AS-tuloina

LISÄVARUSTEESTA l

MISSÄ

l.shipdate> = PÄIVÄMÄÄRÄ '' 1994-01-01 ''

JA l. Lähetyspäivä <PÄIVÄYS '1994-01-01' + VÄLIVUOSI '1' VUOSI

JA l. Alennus 0,06 - 0,01 JA 0,06 + 0,01

JA l. Määrä <24;

Tämä on kysely numero kuusi, joka tunnetaan nimellä Forecasting Revenue Change Query. Lainaten TPC-H-dokumentaatiota "tämä kysely määrittelee tulojen kasvun määrän, joka olisi johtunut tiettyjen koko yrityksen alennusten poistamisesta tietyllä prosenttialueella tiettynä vuonna."

Presto jakaa kyselyn yhteen tai useampaan vaiheeseen, jota kutsutaan myös sirpaleet, ja jokainen vaihe sisältää useita operaattorit. Operaattori on suoritettavan suunnitelman tietty toiminto, joko skannaus, suodatin, liitos tai vaihto. Vaihdot hajottavat usein vaiheet. Vaihto on osa suunnitelmaa, jossa tietoja lähetetään verkon kautta muille Presto-klusterin työntekijöille. Näin Presto onnistuu tarjoamaan skaalautuvuutensa ja suorituskykynsä - jakamalla kyselyn useisiin pienempiin toimintoihin, jotka voidaan suorittaa rinnakkain ja jotka mahdollistavat tietojen jakamisen edelleen klusterin yli yhdistämisten, ryhmittelyjen ja tietojoukkojen järjestämisen suorittamiseksi. Tarkastellaan tämän kyselyn jaettua kyselysuunnitelmaa. Huomaa, että kyselysuunnitelmat luetaan alhaalta ylöspäin.

 Katkelma 0 [YKSI]

- Tuotos [tulot] => [summa: kaksinkertainen]

tulot: = summa

- Kokonaisuus (LOPULLINEN) => [summa: kaksinkertainen]

summa: = "presto.default.sum" ((summa_4))

- LocalExchange [SINGLE] () => [summa_4: kaksinkertainen]

- RemoteSource [1] => [summa_4: kaksinkertainen]

Katkelma 1

- Kokonaisuus (OSUUS) => [summa_4: kaksinkertainen]

summa_4: = "presto.default.sum" ((lauseke))

- ScanFilterProject [taulukko = TableHandle {connectorId = 'tpch', connectorHandle = "lineitem: sf1.0", layout = "Valinnainen [lineitem: sf1.0]"}, ryhmitelty = false, filterPredicate = ((alennus BETWEEN (DOUBLE 0.05) ) JA (DOUBLE 0.07)) JA ((määrä) = (PÄIVÄYS 1994-01-01)) JA ((shipdate) [expr: double]

lauseke: = (laajennettu hinta) * (alennus)

laajennettu hinta: = tpch: jatkettu hinta

alennus: = tpch: alennus

shipdate: = tpch: shipdate

määrä: = tpch: määrä

Suunnitelmassa on kaksi fragmenttia, jotka sisältävät useita operaattoreita. Fragmentti 1 sisältää kaksi operaattoria. ScanFilterProject skannaa tiedot, valitsee tarvittavat sarakkeet (kutsutaan ulkoneva), joka tarvitaan predikaattien täyttämiseen, ja laskee tulot, jotka menetetään kunkin rivikohdan alennuksesta. Sitten osittainen aggregaattioperaattori laskee osittaisen summan. Fragmentti 0 sisältää LocalExchange-operaattorin, joka vastaanottaa osittaiset summat fragmentista 1, ja sitten lopullisen aggregaatin lopullisen summan laskemiseksi. Summa lähetetään sitten asiakkaalle.

Kyselyä suoritettaessa Presto skannaa tietoja ulkoisesta tietolähteestä rinnakkain, laskee kunkin jaon osittaisen summan ja lähettää sitten osittaisen summan tuloksen yhdelle työntekijälle, jotta se voi suorittaa lopullisen aggregaation. Suorittamalla tämän kyselyn saan noin 123141 078,23 dollaria menetettyjä tuloja alennusten vuoksi.

  tulot

----------------------

1.2314107822830005E8

Kun kyselyt kasvavat monimutkaisemmiksi, kuten liittymiset ja ryhmittelyoperaattorit, kyselysuunnitelmat voivat olla hyvin pitkiä ja monimutkaisia. Tämän sanottuaan kyselyt jakautuvat joukoksi operaattoreita, jotka voidaan suorittaa rinnakkain tietojen kanssa, joita pidetään muistissa kyselyn koko eliniän ajan.

Kun tietojoukko kasvaa, voit kasvattaa Presto-klusteriasi ylläpitääksesi samat odotetut käyttöajat. Tämä suorituskyky yhdistettynä joustavuuteen kysellä käytännöllisesti katsoen mitä tahansa tietolähdettä voi auttaa yritystäsi saamaan enemmän arvoa tiedoistasi kuin koskaan ennen - samalla kun pidät tiedot missä tahansa ja vältät kalliita siirtoja ja suunnitteluaikaa tietojen yhdistämiseksi yksi paikka analyysia varten. Presto!

Ashish Tadose on Ahanan perustaja ja pääohjelmistosuunnittelija. Intohimoisesti hajautetuista järjestelmistä Ashish liittyi Ahanaan WalmartLabsista, missä hän pääinsinöörinä rakensi Preston tarjoaman multicloud-datakiihdytyspalvelun johtaen ja suunnittelemalla muita tietojen löytämiseen, yhdistettyihin kyselymoottoreihin ja tiedonhallintaan liittyviä tuotteita. Aikaisemmin Ashish oli vanhempi dataarkkitehti PubMaticissa, jossa hän suunnitteli ja toimitti laajamittaisen adtech-tietojärjestelmän raportointia, analytiikkaa ja koneoppimista varten. Aikaisemmin urallaan hän oli VeriSignin tietotekniikka. Ashish on myös Apache-sitoutuja ja avustaja avoimen lähdekoodin projekteissa.

New Tech Forum tarjoaa mahdollisuuden tutkia ja keskustella kehittyvistä yritysteknologioista ennennäkemättömällä syvyydellä ja laajuudella. Valinta on subjektiivinen, perustuu valitsemiemme tekniikoihin, joiden uskomme olevan tärkeitä ja kiinnostavia lukijoille. ei hyväksy markkinointivakuuksia julkaisua varten ja pidättää oikeuden muokata kaikkea lähetettyä sisältöä. Lähetä kaikki tiedustelut osoitteeseen [email protected]