Zašto biste Presto trebali koristiti za ad hoc analitiku

Presto! Nije samo pobuda oduševiti publiku nakon čarobnog trika, već i ime koje se sve više koristi kada se razgovara o tome kako se prebaciti kroz velike podatke. Iako postoji mnogo implementacija Prestoa u divljini, tehnologija - distribuirani mehanizam za SQL upite koji podržava sve vrste izvora podataka - mnogim programerima i analitičarima podataka koji bi mogli profitirati od nje ostaje nepoznata.

U ovom ću članku raspravljati o Prestu: što je to, odakle je poteklo, po čemu se razlikuje od ostalih rješenja za skladištenje podataka i zašto biste ga trebali uzeti u obzir za svoja rješenja za velike podatke.

Presto protiv košnice

Presto je nastao na Facebooku davne 2012. Otvoreni 2013. godine, a njime je upravljala Presto Foundation (dio Linux Foundation), Presto je tijekom godina doživio stalni rast popularnosti. Danas je nekoliko tvrtki izgradilo poslovni model oko Prestoa, poput Ahane, s ad hoc ponudom ad hoc analitike na temelju PrestoDB-a.

Presto je izgrađen kao sredstvo za pružanje krajnjim korisnicima pristupa ogromnim skupovima podataka za provođenje ad hoc analize. Prije Presta, Facebook bi koristio Hive (koji je također izgradio Facebook, a zatim donirao Apache Software Foundation) kako bi izvršio ovu vrstu analize. Kako su Facebook-ovi skupovi podataka rasli, utvrđeno je da je Hive nedovoljno interaktivan (čitaj: prespor). To je uglavnom bilo zbog toga što je temelj Hive-a MapReduce, koji je u to vrijeme zahtijevao da se posredni skupovi podataka zadrže na HDFS-u. To je značilo puno I / O na disk za podatke koji su u konačnici bačeni. 

Presto zauzima drugačiji pristup izvršavanju tih upita radi uštede vremena. Umjesto da zadrži posredne podatke na HDFS-u, Presto vam omogućuje uvlačenje podataka u memoriju i izvršavanje operacija podataka tamo, umjesto da ustraje sve posredne skupove podataka na disku. Ako to zvuči poznato, možda ste čuli za Apache Spark (ili bilo koji broj drugih tehnologija) koji imaju isti osnovni koncept kako bi učinkovito zamijenili tehnologije temeljene na MapReduceu. Koristeći Presto, čuvat ću podatke tamo gdje žive (u Hadoopu ili, kao što ćemo vidjeti, bilo gdje) i izvršiti izvršenja u memoriji u našem distribuiranom sustavu, premještajući podatke između poslužitelja po potrebi. Izbjegavam dodirivati ​​bilo koji disk, na kraju ubrzavajući vrijeme izvršavanja upita.

Kako Presto radi

Za razliku od tradicionalnog skladišta podataka, Presto se naziva mehanizmom za izvršavanje SQL upita. Skladišta podataka kontroliraju kako se podaci zapisuju, gdje se ti podaci nalaze i kako se čitaju. Jednom kada unesete podatke u svoje skladište, može se pokazati teškim povratiti ih. Presto uzima drugi pristup odvajanjem pohrane podataka od obrade, istovremeno pružajući podršku za isti jezik upita ANSI SQL na koji ste navikli.

U svojoj osnovi, Presto izvršava upite preko skupova podataka koje pružaju dodaci, posebno Connectors. Konektor omogućuje Prestu da čita (i čak zapisuje) podatke u vanjski podatkovni sustav. Konektor košnica jedan je od standardnih konektora koji koristi iste metapodatke koje biste koristili za interakciju s HDFS-om ili Amazonom S3. Zbog ove povezanosti, Presto je zamjenska zamjena za organizacije koje danas koriste Hive. U mogućnosti je čitati podatke iz istih shema i tablica koristeći iste formate podataka - ORC, Avro, Parket, JSON i još mnogo toga. Pored konektora Hive, pronaći ćete konektore za Cassandru, Elasticsearch, Kafka, MySQL, MongoDB, PostgreSQL i mnoge druge. Priključci se cijelo vrijeme doprinose Prestu, što Prestu daje mogućnost pristupa podacima bilo gdje u kojem žive.

Prednost ovog nevezanog modela pohrane je što Presto može pružiti jedinstveni objedinjeni prikaz svih vaših podataka - bez obzira gdje se oni nalaze. To povećava mogućnosti ad hoc upita na razine koje nikada prije nije dosegao, a istovremeno pruža interaktivna vremena upita za vaše velike skupove podataka (sve dok imate infrastrukturu za sigurnosno kopiranje, lokalno ili u oblaku).

Pogledajmo kako je Presto postavljen i kako se izvršava vaš upit. Presto je napisan na Javi i stoga za pokretanje zahtijeva JDK ili JRE. Presto je raspoređen kao dvije glavne službe, jedan koordinator i mnogi radnici . Usluga koordinatora zapravo je mozak operacije, prima zahtjeve za upite od klijenata, raščlanjuje upit, gradi plan izvršenja, a zatim raspoređuje posao koji treba obaviti u mnogim radničkim službama. Svaki Worker paralelno obrađuje dio ukupnog upita, a vi možete dodati Worker usluge u svoju Presto implementaciju kako bi odgovarali vašim zahtjevima. Svaki je izvor podataka konfiguriran kao katalog i u svakom upitu možete postaviti upit koliko god želite kataloga.

Ahana

Prestu se pristupa putem JDBC pokretačkog programa i integrira se s praktički bilo kojim alatom koji se može povezati s bazama podataka koristeći JDBC. Sučelje naredbenog retka Presto ili CLI često je početna točka na početku istraživanja Prestoa. U svakom slučaju, klijent se povezuje s koordinatorom kako bi izdao SQL upit. Taj upit koordinator analizira i provjerava i ugrađuje u plan izvršavanja upita. Ovaj plan detaljno opisuje kako će radnici Presta izvršiti upit. Plan upita (obično) započinje jednim ili više skeniranja tablice kako bi se podaci izvukli iz vanjskih spremišta podataka. Zatim postoji niz operatora za izvođenje projekcija, filtara, spajanja, grupiranja, narudžbi i svih vrsta drugih operacija. Plan završava isporukom konačnog rezultata klijentu putem Koordinatora.Ovi su planovi upita od vitalnog značaja za razumijevanje načina na koji Presto izvršava vaše upite, kao i za seciranje izvedbe upita i pronalaženje potencijalnih uskih grla.

Primjer upita Presto

Pogledajmo upit i odgovarajući plan upita. Upotrijebit ću TPC-H upit, uobičajeni alat za usporedbu koji se koristi za SQL baze podataka. Ukratko, TPC-H definira standardni skup tablica i upita kako bi se testirala potpunost SQL jezika, kao i sredstvo za usporedbu različitih baza podataka. Podaci su dizajnirani za slučajeve poslovne upotrebe, sadrže naloge za prodaju predmeta koji se mogu dobiti velikim brojem zaliha. Presto nudi TPC-H konektor koji stvara podatke u letu - vrlo koristan alat prilikom provjere Prestoa.

ODABERI

  SUM (l.proširena cijena * l.popust) KAO prihod

IZ lineitem l

GDJE

  l.shipdate> = DATUM '01.01.1994.'

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

   I l.popust IZMEĐU .06 - 0,01 I .06 + 0,01

   I l.količina <24;

Ovo je upit broj šest, poznat kao Upit o prognozi promjene prihoda. Citirajući dokumentaciju TPC-H, "ovaj upit kvantificira iznos povećanja prihoda koji bi proizašao iz ukidanja određenih popusta za cijelu tvrtku u zadanom postotnom rasponu u određenoj godini."

Presto raspada upit u jednu ili više faza, koje se nazivaju i fragmenti , a svaka faza sadrži više operatora . Operator je određena funkcija plana koja se izvršava, bilo skeniranje, filtar, spajanje ili razmjena. Razmjene često razbijaju faze. Razmjena je dio plana gdje se podaci šalju mrežom ostalim radnicima u Presto klasteru. Na ovaj način Presto uspijeva osigurati njegovu skalabilnost i izvedbu - dijeljenjem upita na više manjih operacija koje se mogu izvoditi paralelno i omogućuju preraspodjelu podataka po klasteru radi izvođenja spajanja, grupiranja i poredavanja skupova podataka. Pogledajmo plan distribuiranih upita za ovaj upit. Imajte na umu da se planovi upita čitaju odozdo prema gore.

 Fragment 0 [JEDNOG]

     - izlaz [prihod] => [zbroj: dvostruko]       

             prihod: = zbroj   

         - Zbirno (FINAL) => [zbroj: dvostruko]         

                 zbroj: = "presto.default.sum" ((zbroj_4))          

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

                 - RemoteSource [1] => [zbroj_4: dvostruko]      

 Ulomak 1 

     - Zbir (DIJELIM) => [zbroj_4: dvostruko]  

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

         - ScanFilterProject [table = TableHandle {konektorId = 'tpch', konektorHandle = "lineitem: sf1.0", layout = "Izborno [lineitem: sf1.0]"}, grupirano = netačno, filterPredicate = ((popust IZMEĐU (DUPLI 0,05) ) AND (DOUBLE 0,07)) AND ((količina) = (DATUM 01.1.1994.)) AND ((datum isporuke) [izraz: dvostruko]

                 izraz: = (produžena cijena) * (popust)   

                 extendedprice := tpch:extendedprice

                 discount := tpch:discount         

                 shipdate := tpch:shipdate 

                 quantity := tpch:quantity  

This plan has two fragments containing several operators. Fragment 1 contains two operators. The ScanFilterProject scans data, selects the necessary columns (called projecting) needed to satisfy the predicates, and calculates the revenue lost due to the discount for each line item. Then a partial Aggregate operator calculates the partial sum. Fragment 0 contains a LocalExchange operator that receives the partial sums from Fragment 1, and then the final aggregate to calculate the final sum. The sum is then output to the client.

When executing the query, Presto scans data from the external data source in parallel, calculates the partial sum for each split, and then ships the result of that partial sum to a single worker so it can perform the final aggregation. Running this query, I get about $123,141,078.23 in lost revenue due to the discounts.

      revenue       

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

 1.2314107822830005E8

As queries grow more complex, such as joins and group-by operators, the query plans can get very long and complicated. With that said, queries break down into a series of operators that can be executed in parallel against data that is held in memory for the lifetime of the query.

As your data set grows, you can grow your Presto cluster in order to maintain the same expected runtimes. This performance, combined with the flexibility to query virtually any data source, can help empower your business to get more value from your data than ever before — all while keeping the data where it is and avoiding expensive transfers and engineering time to consolidate your data into one place for analysis. Presto!

Ashish Tadose is co-founder and principal software engineer at Ahana. Passionate about distributed systems, Ashish joined Ahana from WalmartLabs, where as principal engineer he built a multicloud data acceleration service powered by Presto while leading and architecting other products related to data discovery, federated query engines, and data governance. Previously, Ashish was a senior data architect at PubMatic where he designed and delivered a large-scale adtech data platform for reporting, analytics, and machine learning. Earlier in his career, he was a data engineer at VeriSign. Ashish is also an Apache committer and contributor to open source projects.

New Tech Forum pruža mjesto za istraživanje i raspravu o novonastaloj tehnologiji poduzeća u neviđenoj dubini i širini. Izbor je subjektivan, zasnovan na našem odabiru tehnologija za koje vjerujemo da su važne i da najviše zanimaju čitatelje. ne prihvaća marketinške kolaterale za objavljivanje i zadržava pravo uređivanja cjelokupnog sadržaja. Pošaljite sve upite na [email protected]