Programavimas

Kodėl turėtumėte naudoti „Presto“ ad hoc analizei

Presto! Tai ne tik užkalbinimas sujaudinti auditoriją po stebuklingo triuko, bet ir vardas, kuris vis dažniau naudojamas diskutuojant, kaip peržvelgti didelius duomenis. Nors gamtoje yra daug „Presto“ diegimų, ši technologija - paskirstytasis SQL užklausų variklis, palaikantis visų rūšių duomenų šaltinius, lieka nepažįstamas daugeliui kūrėjų ir duomenų analitikų, kuriems galėtų būti naudinga ją naudoti.

Šiame straipsnyje aptarsiu „Presto“: kas tai yra, iš kur jis atsirado, kuo jis skiriasi nuo kitų duomenų sandėliavimo sprendimų ir kodėl turėtumėte tai apsvarstyti dėl didžiųjų duomenų sprendimų.

„Presto“ prieš avilį

„Presto“ atsirado „Facebook“ dar 2012 m. Atidaryta 2013 m. Ir vadovaujama „Presto“ fondo („Linux“ fondo dalis), „Presto“ populiarumas per metus nuolat augo. Šiandien kelios įmonės sukūrė „Presto“ verslo modelį, pavyzdžiui, „Ahana“, naudodamos „PrestoDB“ pagrįstus ad hoc analizės pasiūlymus.

„Presto“ buvo sukurta kaip priemonė, suteikianti galutiniams vartotojams prieigą prie milžiniškų duomenų rinkinių ad hoc analizei atlikti. Prieš atlikdamas „Presto“, „Facebook“ naudojo „Hive“ (kurį taip pat sukūrė „Facebook“ ir tada paaukojo „Apache Software Foundation“), kad atliktų tokią analizę. Augant „Facebook“ duomenų rinkiniams, nustatyta, kad „Hive“ nėra pakankamai interaktyvus (skaitykite: per lėtas). Tai daugiausia lėmė tai, kad „Hive“ pagrindas yra „MapReduce“, kuriam tuo metu reikėjo išlaikyti HDFS tarpinius duomenų rinkinius. Tai reiškė daug įvesties / išvesties į diską duomenims, kurie galiausiai buvo išmesti.

„Presto“ taupo laiką naudoja kitokį požiūrį į šių užklausų vykdymą. Užuot saugojęs tarpinius duomenis HDFS, „Presto“ leidžia nešti visus tarpinius duomenų rinkinius į diską, bet juos įtraukti į atmintį ir atlikti jame esančias operacijas. Jei tai skamba gerai, galbūt girdėjote apie „Apache Spark“ (ar bet kurią kitą ten esančią technologiją), turinčią tą pačią pagrindinę koncepciją, kad efektyviai pakeistų „MapReduce“ pagrįstas technologijas. Naudodamas „Presto“, aš išsaugosiu duomenis ten, kur jis gyvena („Hadoop“ arba, kaip matysime, bet kur) ir vykdysiu įvykdymus atmintyje visoje mūsų paskirstytoje sistemoje, jei reikia, maišysiu duomenis tarp serverių. Vengiu neliesti jokio disko, galų gale pagreitinu užklausos vykdymo laiką.

Kaip veikia „Presto“

Skirtingai nuo tradicinio duomenų sandėlio, „Presto“ vadinamas SQL užklausos vykdymo varikliu. Duomenų saugyklos kontroliuoja, kaip duomenys rašomi, kur tie duomenys yra ir kaip jie skaitomi. Gavę duomenis į savo sandėlį, gali būti sunku juos grąžinti. „Presto“ naudojasi kitu požiūriu, atsiejdamas duomenų saugyklą nuo apdorojimo, tuo pačiu palaikydamas tą pačią ANSI SQL užklausos kalbą, prie kurios esate įpratęs.

Savo esme „Presto“ vykdo užklausas dėl duomenų rinkinių, kuriuos teikia papildiniai Jungtys. Jungtis suteikia galimybę „Presto“ skaityti (ir net rašyti) duomenis į išorinę duomenų sistemą. „Hive Connector“ yra viena iš standartinių jungčių, naudojančių tuos pačius metaduomenis, kuriuos naudotumėte sąveikaudami su HDFS ar „Amazon S3“. Dėl šio ryšio „Presto“ yra „Hive“ šiandien naudojančių organizacijų pakaitalas. Jis sugeba nuskaityti duomenis iš tų pačių schemų ir lentelių, naudodamas tuos pačius duomenų formatus - ORC, Avro, Parketas, JSON ir kt. Be „Hive“ jungties, rasite „Cassandra“, „Elasticsearch“, „Kafka“, „MySQL“, „MongoDB“, „PostgreSQL“ ir daugelio kitų jungtis. Jungtys prie „Presto“ prisidedamos nuolat, suteikdamos „Presto“ galimybę pasiekti duomenis bet kur, kur jis gyvena.

Šio atsieto saugyklos modelio privalumas yra tas, kad „Presto“ gali pateikti vieną bendrą visų jūsų duomenų rodinį, kad ir kur jie būtų. Tai padidina ad hoc užklausų galimybes iki tokio lygio, kokio dar niekada nepasiekė, taip pat užtikrindama interaktyvų užklausų laiką per didelius duomenų rinkinius (jei turite infrastruktūros, kur ją kurti, vietoje ar debesyje).

Pažvelkime į tai, kaip „Presto“ yra įdiegtas ir kaip jis vykdo jūsų užklausas. „Presto“ yra parašytas „Java“, todėl norint pradėti, reikia JDK arba JRE. „Presto“ diegiama kaip dvi pagrindinės paslaugos, viena Koordinatorius ir daugelis Darbininkai. Koordinatoriaus paslauga yra veiksminga operacija, gaunant užklausas iš klientų, analizuojant užklausą, sudarant vykdymo planą ir planuojant daugelio „Worker“ tarnybų atliekamą darbą. Kiekvienas darbuotojas lygiagrečiai apdoroja dalį bendros užklausos, o jūs galite pridėti „Worker“ paslaugas prie „Presto“ diegimo, kad atitiktų jūsų poreikius. Kiekvienas duomenų šaltinis sukonfigūruotas kaip katalogą, ir kiekvienoje užklausoje galite pateikti tiek katalogų, kiek norite.

Ahana

„Presto“ pasiekiama per JDBC tvarkyklę ir ji integruojama praktiškai su bet kuriuo įrankiu, kuris gali prisijungti prie duomenų bazių naudodamas JDBC. „Presto“ komandinės eilutės sąsaja arba CLI dažnai yra pradinis taškas pradedant tyrinėti „Presto“. Bet kokiu atveju klientas prisijungia prie koordinatoriaus, kad išduotų SQL užklausą. Šią užklausą analizuoja ir patvirtina koordinatorius ir įtraukia į užklausos vykdymo planą. Šiame plane išsamiai aprašyta, kaip „Presto“ darbuotojai vykdys užklausą. Užklausos planas (paprastai) prasideda nuo vieno ar daugiau lentelių nuskaitymo, siekiant ištraukti duomenis iš išorinių duomenų saugyklų. Tada yra keletas operatorių, kurie atlieka projekcijas, filtrus, sujungimus, grupavimo veiksmus, užsakymus ir visas kitas operacijas. Planas baigiasi tuo, kad galutinį rezultatų rinkinį klientui pateikia per koordinatorių. Šie užklausų planai yra gyvybiškai svarbūs norint suprasti, kaip „Presto“ vykdo jūsų užklausas, taip pat norint išskaidyti užklausų našumą ir rasti galimų kliūčių.

„Presto“ užklausos pavyzdys

Pažvelkime į užklausą ir atitinkamą užklausos planą. Aš naudosiu TPC-H užklausą, įprastą palyginimo įrankį, naudojamą SQL duomenų bazėms. Trumpai tariant, TPC-H apibrėžia standartinį lentelių ir užklausų rinkinį, kad būtų galima patikrinti SQL kalbos išsamumą, taip pat priemonę įvairioms duomenų bazėms palyginti. Duomenys skirti verslo reikmėms, juose yra prekių, kurias gali pateikti daugybė atsargų, pardavimo užsakymai. „Presto“ pateikia TPC-H jungtį, kuri generuoja duomenis skrendant - labai naudinga priemonė tikrinant „Presto“.

PASIRINKTI

SUM (l.extendedprice * l.discount) AS pajamos

IŠ linijos l

KUR

l.shipdate> = DATA „1994-01-01“

AND l.shipdate <DATE '1994-01-01' + INTERVALA '1' YEAR

IR l. Nuolaida tarp .06 - 0.01 IR .06 + 0.01

IR l. Kiekis <24;

Tai yra šeštoji užklausa, vadinama pajamų prognozavimo prognozavimo užklausa. Cituojant TPC-H dokumentaciją, „ši užklausa kiekybiškai įvertina pajamų padidėjimo sumą, kuri būtų susidariusi pašalinus tam tikras visos įmonės nuolaidas tam tikru procentų intervalu tam tikrais metais“.

„Presto“ suskirsto užklausą į vieną ar kelis etapus, dar vadinamus fragmentai, ir kiekviename etape yra keli operatoriai. Operatorius yra tam tikra vykdomo plano funkcija - nuskaitymas, filtras, sujungimas arba mainai. Mainai dažnai suskirsto etapus. Keitimasis yra plano dalis, kai duomenys per tinklą siunčiami kitiems „Presto“ grupės darbuotojams. Štai kaip „Presto“ sugeba užtikrinti savo mastelį ir našumą - padalijant užklausą į kelias mažesnes operacijas, kurias galima atlikti lygiagrečiai ir leisti duomenis perskirstyti klasteriui, kad būtų galima atlikti sujungimus, grupes ir duomenų rinkinių eiliškumą. Pažvelkime į šios užklausos paskirstytą užklausos planą. Atminkite, kad užklausų planai yra skaitomi iš apačios į viršų.

 0 fragmentas [VIENAS]

- Rezultatas [pajamos] => [suma: dviguba]

pajamos: = suma

- Bendrasis (GALUTINIS) => [suma: dvigubas]

suma: = "presto.default.sum" ((suma_4))

- „LocalExchange“ [SINGLE] () => [sum_4: dvigubai]

- „RemoteSource“ [1] => [suma_4: dviguba]

1 fragmentas

- Bendrasis (dalinis) => [suma_4: dvigubas]

suma_4: = "presto.default.sum" ((expr))

- ScanFilterProject [table = TableHandle {connectorId = 'tpch', connectorHandle = "lineitem: sf1.0", layout = "Pasirenkama [lineitem: sf1.0]"}, sugrupuota = false, filterPredicate = ((nuolaida tarp (dvigubo 0,05) ) IR (DVIGUBAS 0,07)) IR ​​((kiekis) = (DATA 1994-01-01)) IR ​​((siuntimo data) [pvz .: dvigubai]

expr: = (išplėstinė kaina) * (nuolaida)

išplėstinė kaina: = tpch: išplėstinė kaina

nuolaida: = tpch: nuolaida

shipdate: = tpch: shipdate

kiekis: = tpch: kiekis

Šiame plane yra du fragmentai, kuriuose yra keli operatoriai. 1 fragmente yra du operatoriai. „ScanFilterProject“ nuskaito duomenis, parenka reikiamus stulpelius (vadinamus projektavimas), reikalingų predikatams patenkinti, ir apskaičiuoja pajamas, prarastas dėl kiekvieno eilutės elemento nuolaidos. Tada dalinis agregato operatorius apskaičiuoja dalinę sumą. 0 fragmente yra „LocalExchange“ operatorius, kuris gauna dalines sumas iš 1 fragmento, o paskui - galutinę suminę sumą galutinei sumai apskaičiuoti. Tada suma išvedama klientui.

Vykdydamas užklausą, „Presto“ lygiagrečiai nuskaito duomenis iš išorinio duomenų šaltinio, apskaičiuoja kiekvieno padalijimo dalinę sumą ir tada išsiunčia tos dalinės sumos rezultatą vienam darbuotojui, kad jis galėtų atlikti galutinį kaupimą. Vykdydamas šią užklausą, gaunu apie 123 141 078,23 USD prarastų pajamų dėl nuolaidų.

  pajamos

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

1.2314107822830005E8

Kai užklausos tampa vis sudėtingesnės, pvz., Prisijungimai ir grupiniai operatoriai, užklausų planai gali būti labai ilgi ir sudėtingi. Tai pasakius, užklausos suskirstomos į daugybę operatorių, kuriuos galima lygiagrečiai vykdyti pagal duomenis, kurie atmintyje laikomi visą užklausos laiką.

Didėjant duomenų rinkiniui, galite išplėsti savo „Presto“ grupę, kad išlaikytumėte tą patį numatomą vykdymo laiką. Šis našumas kartu su lankstumu pateikti užklausas praktiškai bet kokiam duomenų šaltiniui gali padėti jūsų verslui gauti daugiau naudos iš jūsų duomenų nei bet kada anksčiau - visa tai išlaikant duomenis ten, kur jie yra, ir išvengiant brangių duomenų perdavimo bei inžinerijos laiko, kad duomenys būtų sujungti viena vieta analizei. Presto!

Ashishas Tadose yra „Ahana“ įkūrėjas ir pagrindinis programinės įrangos inžinierius. Aistringas dėl paskirstytų sistemų Ashishas prisijungė prie „Ahana“ iš „WalmartLabs“, kur, būdamas pagrindinis inžinierius, sukūrė „Presto“ valdomą daugialypės debesies duomenų spartinimo paslaugą, vadovaudamas ir kurdamas kitus su duomenų atradimu, federalinių užklausų varikliais ir duomenų valdymu susijusius produktus. Anksčiau Ashishas buvo „PubMatic“ vyresnysis duomenų architektas, kurdamas ir pristatęs didelio masto „adtech“ duomenų platformą ataskaitoms, analizei ir mašininiam mokymuisi. Anksčiau savo karjeroje jis buvo „VeriSign“ duomenų inžinierius. Ashishas taip pat yra „Apache“ įsipareigotojas ir atvirojo kodo projektų dalyvis.

Naujųjų technologijų forumas suteikia galimybę tyrinėti ir aptarti besiformuojančios įmonės technologijas beprecedentiame gylyje. Atranka yra subjektyvi, atsižvelgiant į mūsų pasirinktas technologijas, kurios, mūsų manymu, yra svarbios ir labiausiai domina skaitytojus. nepriima rinkodaros užtikrinimo priemonės paskelbimui ir pasilieka teisę redaguoti visą pateiktą turinį. Visus klausimus siųskite adresu [email protected]