Programiranje

Zakaj bi morali Presto uporabljati za ad hoc analitiko

Presto! To ni le začaranje, da navdušite občinstvo po čarovniškem triku, ampak tudi ime, ki se vedno pogosteje uporablja, ko razpravljate o tem, kako se pretakati skozi velike podatke. Čeprav je Presto v divjini veliko uvedenih, tehnologija - porazdeljeni mehanizem za poizvedbe SQL, ki podpira vse vrste podatkovnih virov - mnogim razvijalcem in analitikom podatkov ostaja neznana, ki bi jim lahko koristila.

V tem članku bom razpravljal o Prestu: kaj je, od kod je prišel, v čem se razlikuje od drugih rešitev za skladiščenje podatkov in zakaj bi ga morali upoštevati pri svojih rešitvah za velike podatke.

Presto proti panju

Presto je na Facebooku izviral leta 2012. Odprti viri so bili leta 2013, upravljal pa ga je Presto Foundation (del fundacije Linux), zato je Presto v preteklih letih doživel nenehen porast priljubljenosti. Danes je več podjetij okoli Presta zgradilo poslovni model, na primer Ahana, s ponudbo ad hoc analitike, ki temelji na PrestoDB.

Presto je bil zasnovan kot sredstvo, ki končnim uporabnikom omogoča dostop do ogromnih podatkovnih nizov za izvedbo ad hoc analiz. Pred Prestom bi Facebook za izvajanje tovrstne analize uporabljal Hive (prav tako ga je zgradil Facebook in nato podaril fundaciji Apache Software Foundation). Ko so Facebook-ovi nabori podatkov naraščali, je bilo ugotovljeno, da je Hive premalo interaktiven (beri: prepočasen). To je bilo predvsem zato, ker je temelj panja MapReduce, ki je takrat zahteval, da se vmesni nabori podatkov ohranijo na HDFS. To je pomenilo veliko V / I na disk za podatke, ki so bili na koncu zavrženi.

Presto ima drugačen pristop k izvajanju teh poizvedb, da prihrani čas. Namesto da hrani vmesne podatke na HDFS, Presto omogoča, da podatke povlečete v pomnilnik in tam izvajate operacije, namesto da bi vse vmesne nabore podatkov obdržali na disku. Če se vam to zdi znano, ste morda že slišali za Apache Spark (ali katero koli drugo tehnologijo), ki ima enak osnovni koncept za učinkovito nadomestitev tehnologij, ki temeljijo na MapReduce. S pomočjo Presta bom podatke hranil tam, kjer živijo (v Hadoopu ali, kot bomo videli, kjer koli že) in izvedel izvedbe v pomnilniku v našem porazdeljenem sistemu ter po potrebi premeščal podatke med strežniki. Izogibam se dotiku katerega koli diska, kar na koncu pospeši čas izvajanja poizvedbe.

Kako Presto deluje

V nasprotju s tradicionalnim podatkovnim skladiščem se Presto imenuje stroj za izvajanje poizvedb SQL. Skladišča podatkov nadzorujejo, kako se zapisujejo podatki, kje so ti podatki in kako jih berejo. Ko enkrat vnesete podatke v svoje skladišče, se lahko izkaže, da jih je težko dobiti nazaj. Presto ima še en pristop, tako da loči shranjevanje podatkov od obdelave, hkrati pa zagotavlja podporo za isti poizvedbeni jezik ANSI SQL, ki ste ga vajeni.

V bistvu Presto izvaja poizvedbe po naborih podatkov, ki jih zagotavljajo vtičniki Konektorji. Connector omogoča Prestu, da prebere (in celo zapiše) podatke v zunanji podatkovni sistem. Hive Connector je eden od standardnih konektorjev, ki uporablja enake metapodatke, ki bi jih uporabili za interakcijo s HDFS ali Amazon S3. Zaradi te povezljivosti je Presto nadomestna organizacija, ki danes uporablja Hive. Podatke lahko bere iz istih shem in tabel z enakimi formati podatkov - ORC, Avro, Parquet, JSON in še več. Poleg priključka Hive najdete tudi priključke za Cassandra, Elasticsearch, Kafka, MySQL, MongoDB, PostgreSQL in mnoge druge. Konektorji ves čas prispevajo k Prestu, kar Prestu omogoča, da lahko dostopa do podatkov kjer koli živi.

Prednost tega ločenega modela pomnilnika je, da lahko Presto zagotovi en sam zvezni pogled vseh vaših podatkov - ne glede na to, kje se nahajajo. To povečuje zmožnosti ad hoc poizvedovanja na ravni, ki jih še nikoli ni dosegel, hkrati pa zagotavlja interaktivne čase poizvedb za velike nabore podatkov (če imate infrastrukturo za varnostno kopiranje, lokalno ali v oblaku).

Oglejmo si, kako je Presto postavljen in kako poteka izvajanje vaših poizvedb. Presto je napisan v Javi in ​​zato za zagon potrebuje JDK ali JRE. Presto deluje kot dve glavni storitvi, ena sama Koordinator in mnogi Delavci. Storitev koordinator je dejansko možganski del operacije, ki prejema zahteve za poizvedbe od strank, razčlenjuje poizvedbo, gradi načrt izvedbe in nato razporeja delo, ki ga je treba opraviti v številnih storitvah Worker. Vsak Worker vzporedno obdela del celotne poizvedbe, vi pa lahko v uvajanje Presto dodate storitve Worker, ki ustrezajo vašim potrebam. Vsak vir podatkov je konfiguriran kot katalogin v vsaki poizvedbi lahko poiščete toliko katalogov, kot želite.

Ahana

Do Presto dostopate prek gonilnika JDBC in se integrira s praktično katerim koli orodjem, ki se lahko poveže z bazami podatkov s pomočjo JDBC. Vmesnik ukazne vrstice Presto ali CLI je pogosto izhodišče za začetek raziskovanja Presto. Kakor koli, odjemalec se poveže s koordinatorjem, da izda poizvedbo SQL. To poizvedbo razčleni in potrdi koordinator in jo vgradi v načrt izvedbe poizvedbe. Ta načrt podrobno opisuje, kako bodo poizvedbo izvedli delavci Presto. Načrt poizvedbe (običajno) se začne z enim ali več skeniranji tabel, da se podatki potegnejo iz zunanjih shramb podatkov. Nato obstaja vrsta operaterjev za izvajanje projekcij, filtrov, združevanj, združevanja, naročil in vseh vrst drugih operacij. Načrt se konča s končnim rezultatom, ki ga naročniku dostavi preko koordinatorja. Ti načrti poizvedb so ključnega pomena za razumevanje, kako Presto izvaja vaše poizvedbe, pa tudi za razčlenitev uspešnosti poizvedb in iskanje morebitnih ozkih grl.

Primer poizvedbe Presto

Oglejmo si poizvedbo in ustrezen načrt poizvedb. Uporabil bom poizvedbo TPC-H, običajno orodje za primerjalno analizo, ki se uporablja za zbirke podatkov SQL. Skratka, TPC-H opredeljuje standardni nabor tabel in poizvedb, da bi preizkusil popolnost jezika SQL, pa tudi sredstvo za primerjavo različnih baz podatkov. Podatki so namenjeni primerom poslovne uporabe in vsebujejo prodajna naročila izdelkov, ki jih je mogoče zagotoviti z velikim številom zalog. Presto ponuja priključek TPC-H, ki sproti ustvarja podatke - zelo uporabno orodje pri preverjanju Presto.

IZBERI

SUM (l. Razširjena cena * l. Popust) AS prihodki

IZ lineitem l

KJE

l.shipdate> = DATUM '1994-01-01'

AND l.shipdate <DATUM '1994-01-01' + INTERVAL '1' LETO

IN l.popust MED .06 - 0,01 IN .06 + 0,01

IN l.količina <24;

To je poizvedba številka šest, znana kot napoved spremembe prihodkov. Navajam dokumentacijo TPC-H, "ta poizvedba količinsko opredeljuje znesek povečanja prihodkov, ki bi bil posledica odprave nekaterih popustov za celotno podjetje v določenem odstotnem območju v določenem letu."

Presto poizvedbo razdeli v eno ali več stopenj, imenovanih tudi drobci, in vsaka stopnja vsebuje več operaterji. Operater je posebna funkcija načrta, ki se izvede, bodisi skeniranje, filter, združevanje ali izmenjava. Izmenjave pogosto razbijejo faze. Izmenjava je del načrta, kjer se podatki po omrežju pošiljajo drugim delavcem v gruči Presto. Tako Presto uspe zagotoviti svojo razširljivost in zmogljivost - tako da poizvedbo razdeli na več manjših operacij, ki jih je mogoče izvajati vzporedno in omogočajo prerazporeditev podatkov po gruči za izvedbo združevanja, združevanja v skupine in urejanja naborov podatkov. Oglejmo si porazdeljeni načrt poizvedb za to poizvedbo. Upoštevajte, da se načrti poizvedb berejo od spodaj navzgor.

 Odlomek 0 [ENO]

- proizvodnja [prihodek] => [vsota: dvojno]

prihodek: = vsota

- Skupno (KONČNO) => [vsota: dvojno]

vsota: = "presto.default.sum" ((vsota_4))

- LocalExchange [SINGLE] () => [sum_4: dvojno]

- RemoteSource [1] => [vsota_4: dvojno]

Odlomek 1

- Skupno (DELNO) => [vsota_4: dvojno]

sum_4: = "presto.default.sum" ((izraz))

- ScanFilterProject [table = TableHandle {connectorId = 'tpch', connectorHandle = "lineitem: sf1.0", layout = "Neobvezno [lineitem: sf1.0]"}, grouped = false, filterPredicate = ((popust MED (DVOJNI 0,05 ) IN (DOUBLE 0,07)) IN ((količina) = (DATUM 01.01.1994)) IN ((datum pošiljanja) [izraz: dvojno]

izraz: = (podaljšana cena) * (popust)

extensionprice: = tpch: razširjena cena

popust: = tpch: popust

datum pošiljanja: = tpch: datum pošiljanja

količina: = tpch: količina

Ta načrt ima dva fragmenta, ki vsebujeta več operaterjev. Fragment 1 vsebuje dva operaterja. ScanFilterProject skenira podatke, izbere potrebne stolpce (imenovane projiciranje), potreben za izpolnitev predikatov, in izračuna prihodek, izgubljen zaradi popusta za posamezno postavko. Nato delni agregatni operater izračuna delno vsoto. Fragment 0 vsebuje operaterja LocalExchange, ki prejme delne vsote iz fragmenta 1 in nato končni agregat za izračun končne vsote. Vsota se nato izpiše odjemalcu.

Pri izvajanju poizvedbe Presto vzporedno skenira podatke iz zunanjega vira podatkov, izračuna delno vsoto za vsako delitev in nato pošlje rezultat te delne vsote enemu delavcu, da lahko izvede končno združevanje. Ob tej poizvedbi dobim približno 123.141.078,23 USD izgubljenega prihodka zaradi popustov.

  prihodkov

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

1.2314107822830005E8

Ko poizvedbe postajajo bolj zapletene, na primer pridružitve in operaterji združevanja, lahko načrti poizvedb postanejo zelo dolgi in zapleteni. S tem se poizvedbe razdelijo na vrsto operaterjev, ki jih je mogoče izvajati vzporedno s podatki, ki se hranijo v pomnilniku za celo življenjsko dobo poizvedbe.

Ko narašča vaš nabor podatkov, lahko rastete svojo gručo Presto, da ohranite enak pričakovani čas delovanja. Ta zmogljivost v kombinaciji s prilagodljivostjo poizvedovanja po skoraj vseh virih podatkov lahko pomaga vašemu podjetju pridobiti večjo vrednost od vaših podatkov kot kdaj koli prej - hkrati pa ohranja podatke tam, kjer so, in se izogiba dragim prenosom in tehničnemu času za konsolidacijo podatkov v eno mesto za analizo. Presto!

Ashish Tadose je soustanovitelj in glavni inženir programske opreme pri Ahani. Navdušen nad porazdeljenimi sistemi, se je Ashish pridružil Ahani iz WalmartLabs, kjer je kot glavni inženir zgradil storitev za pospeševanje večglasnih podatkov, ki jo poganja Presto, medtem ko je vodil in oblikoval druge izdelke, povezane z odkrivanjem podatkov, zveznimi poizvedbenimi mehanizmi in upravljanjem podatkov. Prej je bil Ashish višji podatkovni arhitekt pri PubMatic, kjer je zasnoval in ponudil obsežno podatkovno platformo adtech za poročanje, analitiko in strojno učenje. Prej v svoji karieri je bil podatkovni inženir pri VeriSign. Ashish je tudi zavezanec Apačev in sodelavec pri odprtokodnih projektih.

Forum New Tech ponuja prizorišče za raziskovanje in razpravo o nastajajoči podjetniški tehnologiji v globini in širini brez primere. Izbor je subjektiven in temelji na našem izboru tehnologij, za katere menimo, da so pomembne in najbolj zanimajo bralce. ne sprejema tržnih zavarovanj za objavo in si pridržuje pravico do urejanja celotne prispevane vsebine. Vsa vprašanja pošljite na [email protected].

$config[zx-auto] not found$config[zx-overlay] not found