Programmēšana

Kāpēc ad hoc analīzei jāizmanto Presto?

Presto! Tā ir ne tikai burvība saviļņot auditoriju pēc burvju trika, bet arī vārds, kas tiek izmantots arvien vairāk, apspriežot, kā izpētīt lielos datus. Lai gan savvaļā ir daudz Presto izvietojumu, tehnoloģija - izplatīts SQL vaicājumu dzinējs, kas atbalsta visu veidu datu avotus - joprojām nav pazīstama daudziem izstrādātājiem un datu analītiķiem, kuri varētu gūt labumu no tā izmantošanas.

Šajā rakstā es apspriedīšu Presto: kas tas ir, no kurienes tas radies, kā tas atšķiras no citiem datu noliktavas risinājumiem un kāpēc jums tas jāņem vērā lielo datu risinājumu gadījumā.

Presto pret stropu

Presto radās Facebook 2012. gadā. Atklāts 2013. gadā un to vada Presto fonds (daļa no Linux Foundation), Presto gadu gaitā ir nepārtraukti pieaudzis. Šodien vairāki uzņēmumi ir izveidojuši uzņēmējdarbības modeli ap Presto, piemēram, Ahana, izmantojot PrestoDB balstītus ad hoc analītikas piedāvājumus.

Presto tika izveidots kā līdzeklis, lai nodrošinātu lietotājiem piekļuvi milzīgām datu kopām, lai veiktu ad hoc analīzi. Pirms Presto, lai veiktu šāda veida analīzi, Facebook izmantoja Hive (kuru arī izveidoja Facebook un pēc tam ziedoja Apache Software Foundation). Pieaugot Facebook datu kopām, tika konstatēts, ka Hive nav pietiekami interaktīvs (lasīt: pārāk lēns). Tas galvenokārt notika tāpēc, ka stropa pamats ir MapReduce, kas tajā laikā prasīja, lai HDFS saglabātu starpposma datu kopas. Tas nozīmēja lielu I / O disku datiem, kas galu galā tika izmesti.

Lai ietaupītu laiku, Presto izmanto citu pieeju šo vaicājumu izpildei. Tā vietā, lai HDFS saglabātu starpdatus, Presto ļauj ievilkt datus atmiņā un veikt darbības ar datiem, nevis saglabāt visas starpposma datu kopas diskā. Ja tas izklausās pazīstami, iespējams, esat dzirdējuši par Apache Spark (vai jebkuru citu citu tehnoloģiju), kam ir tāds pats pamatkoncepcija, lai efektīvi aizstātu MapReduce balstītas tehnoloģijas. Izmantojot Presto, es glabāšu datus tur, kur tie dzīvo (Hadoop vai, kā redzēsim, jebkurā vietā) un izpildi izpildīsim atmiņā visā mūsu izplatītajā sistēmā, pēc vajadzības jaucot datus starp serveriem. Es izvairos pieskarties jebkuram diskam, galu galā paātrinot vaicājuma izpildes laiku.

Kā darbojas Presto

Atšķirībā no tradicionālās datu noliktavas, Presto tiek dēvēts par SQL vaicājuma izpildes motoru. Datu noliktavas kontrolē, kā dati tiek rakstīti, kur šie dati atrodas un kā tie tiek lasīti. Kad dati tiek nogādāti noliktavā, var būt grūti tos atgūt. Presto izmanto citu pieeju, atvienojot datu glabāšanu no apstrādes, vienlaikus nodrošinot atbalstu tai pašai ANSI SQL vaicājuma valodai, kurai esat pieradis.

Būtībā Presto veic vaicājumus par datu kopām, kuras nodrošina spraudņi Savienotāji. Savienotājs nodrošina Presto iespēju lasīt (un pat rakstīt) datus ārējā datu sistēmā. Stropu savienotājs ir viens no standarta savienotājiem, izmantojot tos pašus metadatus, kurus izmantotu, lai mijiedarbotos ar HDFS vai Amazon S3. Šīs savienojamības dēļ Presto aizstāj organizācijas, kas šodien izmanto stropu. Tas spēj nolasīt datus no tām pašām shēmām un tabulām, izmantojot tos pašus datu formātus - ORC, Avro, Parkets, JSON un daudz ko citu. Papildus Hive savienotājam atradīsit savienotājus Cassandra, Elasticsearch, Kafka, MySQL, MongoDB, PostgreSQL un daudziem citiem. Savienotāji Presto tiek atbalstīti visu laiku, dodot Presto iespēju piekļūt datiem jebkur, kur tas dzīvo.

Šī atdalītā krātuves modeļa priekšrocība ir tā, ka Presto spēj nodrošināt vienu apvienotu skatu uz visiem jūsu datiem neatkarīgi no tā, kur tie atrodas. Tas palielina ad hoc vaicājumu iespējas līdz tādam līmenim, kādu vēl nekad neesat sasniedzis, vienlaikus nodrošinot arī interaktīvu vaicājumu laiku lielajās datu kopās (ja vien jums ir infrastruktūra, lai to dublētu, lokāli vai mākonī).

Apskatīsim, kā Presto tiek izvietots un kā tas notiek jūsu vaicājumu izpildē. Presto ir rakstīts Java valodā, un tāpēc ir nepieciešams JDK vai JRE, lai varētu startēt. Presto tiek izvietots kā divi galvenie pakalpojumi, viens Koordinators un daudzi Strādnieki. Koordinatora pakalpojums faktiski ir darbības pamats, saņemot vaicājumu pieprasījumus no klientiem, parsējot vaicājumu, izveidojot izpildes plānu un pēc tam ieplānojot daudzos Worker dienestos veicamo darbu. Katrs darbinieks paralēli apstrādā daļu no kopējā vaicājuma, un jūs varat pievienot Worker pakalpojumus savai Presto izvietošanai, lai tas atbilstu jūsu pieprasījumam. Katrs datu avots ir konfigurēts kā katalogs, un katrā vaicājumā varat vaicāt pēc iespējas vairāk katalogu.

Ahana

Presto ir pieejams, izmantojot JDBC draiveri, un tas integrējas praktiski ar jebkuru rīku, kas var izveidot savienojumu ar datu bāzēm, izmantojot JDBC. Sākot izpētīt Presto, komandrindas saskarne Presto vai CLI bieži ir sākumpunkts. Jebkurā gadījumā klients izveido savienojumu ar koordinatoru, lai izdotu SQL vaicājumu. Koordinators parsē un apstiprina šo vaicājumu, un tas tiek iebūvēts vaicājuma izpildes plānā. Šajā plānā ir sīki aprakstīts, kā Presto darbinieki veiks vaicājumu. Vaicājumu plāns (parasti) sākas ar vienu vai vairākiem tabulu skenējumiem, lai izvilktu datus no ārējiem datu krājumiem. Pēc tam ir virkne operatoru, kas veic projekcijas, filtrus, savienojumus, grupēšanu, pasūtījumus un visa veida citas darbības. Plāns beidzas ar gala rezultātu kopas piegādi klientam, izmantojot koordinatoru. Šie vaicājumu plāni ir ļoti svarīgi, lai saprastu, kā Presto izpilda jūsu vaicājumus, kā arī spēja sadalīt vaicājumu veiktspēju un atrast iespējamās vājās vietas.

Presto vaicājuma piemērs

Apskatīsim vaicājumu un atbilstošo vaicājumu plānu. Es izmantošu TPC-H vaicājumu - parastu etalonu rīku, ko izmanto SQL datu bāzēm. Īsāk sakot, TPC-H nosaka standarta tabulu un vaicājumu kopu, lai pārbaudītu SQL valodas pilnīgumu, kā arī līdzekli dažādu datu bāzu etalonu noteikšanai. Dati ir paredzēti lietošanai uzņēmējdarbībā, un tajos ietilpst tādu preču pārdošanas pasūtījumi, kuras var nodrošināt ar lielu daudzumu piegāžu. Presto nodrošina TPC-H savienotāju, kas ģenerē datus lidojumā - ļoti noderīgs rīks, pārbaudot Presto.

SELECT

SUM (l.extendedprice * l.discount) AS ieņēmumi

NO lineitem l

KUR

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

UN l.shipdate <DATUMS '1994-01-01' + INTERVĀLS '1' GADS

UN l. Atlaide starp .06 - 0.01 UN .06 + 0.01

UN l. Daudzums <24;

Šis ir sestais vaicājums, kas pazīstams kā ieņēmumu izmaiņu prognozēšanas vaicājums. Citējot TPC-H dokumentāciju, “šis vaicājums izsaka ieņēmumu pieauguma apjomu, kas būtu radies, atceļot noteiktas uzņēmuma atlaides noteiktā procentu diapazonā attiecīgajā gadā.”

Presto sadala vaicājumu vienā vai vairākos posmos, ko sauc arī fragmenti, un katrā posmā ir vairāki operatoriem. Operators ir noteikta plāna funkcija, kas tiek izpildīta, vai nu skenēšana, filtrs, savienojums vai apmaiņa. Apmaiņa bieži izjauc posmus. Apmaiņa ir tā plāna daļa, kurā dati visā tīklā tiek sūtīti citiem Presto kopas darbiniekiem. Šādi Presto izdodas nodrošināt mērogojamību un veiktspēju - sadalot vaicājumu vairākās mazākās operācijās, kuras var veikt paralēli un ļauj datus pārdalīt visā klasterī, lai veiktu savienojumus, grupēšanu un datu kopu secību. Apskatīsim šī vaicājuma izplatīto vaicājumu plānu. Ņemiet vērā, ka vaicājumu plāni tiek lasīti no apakšas uz augšu.

 0 fragments [VIENOTS]

- Rezultāts [ieņēmumi] => [summa: dubultā]

ieņēmumi: = summa

- Kopējais (GALĪGAIS) => [summa: dubultā]

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

- LocalExchange [SINGLE] () => [summa_4: dubultā]

- RemoteSource [1] => [summa_4: dubultā]

1. fragments

- Kopējais (DAĻĪGS) => [summa_4: dubultā]

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

- ScanFilterProject [table = TableHandle {connectorId = 'tpch', connectorHandle = "lineitem: sf1.0", layout = "Neobligāts [lineitem: sf1.0]"}, grupēts = false, filterPredicate = ((atlaide BETWEEN (DOUBLE 0.05) ) UN (DOUBLE 0.07)) UN ((daudzums) = (DATE 1994-01-01)) UN ((shipdate) [expr: double]

expr: = (pagarināta cena) * (atlaide)

pagarināta cena: = tpch: pagarināta cena

atlaide: = tpch: atlaide

kuģa datums: = tpch: nosūtīšanas datums

daudzums: = tpch: daudzums

Šajā plānā ir divi fragmenti, kas satur vairākus operatorus. 1. fragmentā ir divi operatori. ScanFilterProject skenē datus, atlasa nepieciešamās kolonnas (sauktas projicēšana), kas nepieciešams predikātu apmierināšanai, un aprēķina zaudējumus, kas zaudēti katras rindas vienības atlaides dēļ. Tad daļējs apkopotājs aprēķina daļējo summu. Fragmentā 0 ir LocalExchange operators, kurš saņem daļējās summas no 1. fragmenta, un pēc tam galīgo kopsummu, lai aprēķinātu galīgo summu. Pēc tam summa tiek izvadīta klientam.

Izpildot vaicājumu, Presto paralēli skenē datus no ārējā datu avota, aprēķina katras sadalīšanas daļējo summu un pēc tam nosūta šīs daļējās summas rezultātu vienam darbiniekam, lai tas varētu veikt galīgo apkopošanu. Izpildot šo vaicājumu, es saņemu aptuveni 123 141 078,23 USD zaudētos ieņēmumus atlaižu dēļ.

  ieņēmumiem

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

1.2314107822830005E8

Kad vaicājumi kļūst arvien sarežģītāki, piemēram, pievienošanās un grupēšanas operatori, vaicājumu plāni var kļūt ļoti gari un sarežģīti. Tas nozīmē, ka vaicājumi tiek sadalīti virknē operatoru, kurus var izpildīt paralēli pret datiem, kas tiek saglabāti atmiņā visu vaicājuma laiku.

Pieaugot datu kopai, varat palielināt savu Presto kopu, lai saglabātu to pašu paredzamo izpildlaiku. Šī veiktspēja kopā ar elastību vaicāt praktiski jebkuram datu avotam var palīdzēt jūsu biznesam iegūt lielāku vērtību no jūsu datiem nekā jebkad agrāk - tas viss, saglabājot datus tur, kur tas atrodas, un izvairoties no dārgām pārsūtīšanām un inženierijas laika, lai datus apvienotu viena vieta analīzei. Presto!

Ashish Tadose ir Ahana līdzdibinātājs un galvenais programmatūras inženieris. Kaislīgs par izplatītajām sistēmām, Ešis pievienojās Ahanai no WalmartLabs, kur kā galvenais inženieris uzbūvēja Presto darbināmu daudzmākoņu datu paātrināšanas pakalpojumu, vadot un izstrādājot citus produktus, kas saistīti ar datu atklāšanu, apvienotajiem vaicājumu dzinējiem un datu pārvaldību. Iepriekš Ašišs bija vecākais datu arhitekts uzņēmumā PubMatic, kur viņš izstrādāja un piegādāja liela mēroga adtech datu platformu pārskatu sniegšanai, analīzei un mašīnmācībai. Agrāk savas karjeras laikā viņš bija VeriSign datu inženieris. Ashish ir arī Apache apņemšanās dalībnieks un līdzstrādnieks atvērtā koda projektos.

Jauno tehnoloģiju forums nodrošina vietu, kur bezprecedenta dziļumā un plašumā izpētīt un pārrunāt topošās uzņēmuma tehnoloģijas. Izvēle ir subjektīva, balstoties uz mūsu izvēlētajām tehnoloģijām, kuras, mūsuprāt, ir svarīgas un interesē lasītājus. nepieņem mārketinga nodrošinājumu publicēšanai un patur tiesības rediģēt visu ieguldīto saturu. Nosūtiet visus jautājumus uz [email protected]