Podaci vođeni događajima s Apache Druidom

1. Uvod

U ovom uputstvu razumjet ćemo kako raditi s podacima o događajima i Apache Druidom. Obuhvatit ćemo osnove podataka o događajima i arhitekturu Druida. Kao dio toga, stvorit ćemo jednostavan cjevovod podataka koji koristi razne značajke Druida koji pokriva različite načine unosa podataka i različite načine za postavljanje upita za pripremljene podatke.

2. Osnovni pojmovi

Prije nego što uđemo u detalje rada Apache Druida, prvo prođimo kroz neke od osnovnih koncepata. Prostor koji nas zanima je masovna analitika podataka o događajima u stvarnom vremenu.

Stoga je nužno razumjeti što podrazumijevamo pod podacima o događajima i što je potrebno za njihovu analizu u stvarnom vremenu u mjerilu.

2.1. Što su podaci o događajima?

Podaci o događajima odnose se na informacija o promjeni koja se događa u određenom trenutku. Podaci o događajima gotovo su sveprisutni u današnjim aplikacijama. Od klasičnih dnevnika aplikacija do suvremenih podataka senzora koje generiraju stvari, ima ih praktički svugdje. Često ih karakteriziraju strojno čitljive informacije generirane u masovnim razmjerima.

Oni pokreću nekoliko funkcija poput predviđanja, automatizacije, komunikacije i integracije, da nabrojimo samo neke. Uz to, oni su od značaja u arhitekturi vođenoj događajima.

2.2. Što je Apache Druid?

Apache Druid je baza podataka analitike u stvarnom vremenu dizajnirana za brzu analitiku nad podacima orijentiranim na događaje. Druid je pokrenut 2011., otvoren pod GPL licencom 2012., a premješten u Apache License 2015. Njime upravlja Zaklada Apache uz doprinos zajednice iz nekoliko organizacija. Pruža gutanje u stvarnom vremenu, brzu izvedbu upita i visoku dostupnost.

Ime Druid odnosi se na činjenicu da se njegova arhitektura može prebaciti na rješavanje različitih vrsta problema s podacima. Često se koristi u aplikacijama poslovne inteligencije za analizu velikog broja podataka u stvarnom vremenu i povijesnih podataka.

3. Druidska arhitektura

Druid je izvor podataka usmjeren na stupce i distribuiran na Javi. Sposoban je unijeti velike količine podataka o događajima i ponuditi upite s malim kašnjenjem povrh tih podataka. Štoviše, nudi mogućnost proizvoljnog narezivanja i kockanja podataka.

Zanimljivo je razumjeti kako druidska arhitektura podržava ove značajke. U ovom ćemo dijelu proći kroz neke od važnih dijelova druidske arhitekture.

3.1. Dizajn pohrane podataka

Važno je razumjeti kako Druid strukturira i pohranjuje svoje podatke, što omogućuje dijeljenje i distribuciju. druid dijeli podatke prema zadanim postavkama tijekom obrade i pohranjuje ih u dijelove i segmenti:

druid pohranjuje podatke u ono što znamo kao „izvor podataka“, što je logično slično tablicama u relacijskim bazama podataka. Klaster druida može paralelno rukovati s više izvora podataka, unesenih iz različitih izvora.

Svaki je izvor podataka podijeljen - prema zadanim postavkama na temelju vremena i nadalje na temelju drugih atributa ako je tako konfiguriran. A vremenski raspon podataka poznat je kao "komad" - na primjer, podaci sata ako su podaci podijeljeni po satu.

Svaki komad je dalje podijeljen u jedan ili više "segmenata", koje su pojedinačne datoteke koje se sastoje od mnogih redaka podataka. Izvor podataka može imati od nekoliko segmenata do milijuna segmenata.

3.2. Druidski procesi

Druid je višeprocesna i distribuirana arhitektura. Stoga se svaki proces može samostalno skalirati, što nam omogućuje stvaranje fleksibilnih klastera. Razumijemo važne procese koji su dio Druida:

  • Koordinator: Ovaj je postupak uglavnom odgovoran za upravljanje i distribuciju segmenata i komunicira s povijesnim procesima za učitavanje ili ispuštanje segmenata na temelju konfiguracija
  • Nadređeni: Ovo je glavni postupak koji je odgovoran za prihvaćanje zadataka, koordinaciju raspodjele zadataka, stvaranje zaključavanja oko zadataka i vraćanje statusa pozivaocima
  • Posrednik: Ovo je postupak kojem se svi upiti šalju radi izvršavanja u distribuiranoj klasteru; prikuplja metapodatke od Zookeeper-a i usmjerava upite u procese koji imaju prave segmente
  • Usmjerivač: Ovo je neobavezni postupak koji se može koristiti za usmjeravanje upita prema različitim brokerskim procesima, pružajući tako izolaciju upita za važne podatke
  • Povijesni: To su procesi koji pohranjuju podatke s upitom; održavaju stalnu vezu sa čuvarom zoološkog vrta i paze na informacije o segmentima koje moraju učitati i poslužiti
  • MiddleManager: Ovo su radnički procesi koji izvršavaju predane zadatke; oni prosljeđuju zadatke Peonsima koji rade u odvojenim JVM-ima, pružajući tako izolaciju resursa i dnevnika

3.3. Vanjske ovisnosti

Osim osnovnih procesa, Druid ovisi o nekoliko vanjskih ovisnosti da bi njegov klaster funkcionirao kako se očekivalo.

Pogledajmo kako nastaje druidski klaster zajedno s osnovnim procesima i vanjskim ovisnostima:

Druid koristi duboka pohrana za pohranu svih podataka koji su uneseni u sustav. Oni se ne koriste za odgovaranje na upite, već se koriste kao sigurnosna kopija podataka i za prijenos podataka između procesa. To mogu biti sve, od lokalnog datotečnog sustava do distribuirane trgovine objekata poput S3 i HDFS.

The Pohrana metapodataka koristi se za čuvanje dijeljenih metapodataka sustava poput podataka o upotrebi segmenata i podataka o zadacima. Međutim, nikada se ne koristi za pohranu stvarnih podataka. To je relacijska baza podataka poput Apache Derby, PostgreSQL ili MySQL.

Upotreba druida Apache Čuvar zoološkog vrta za upravljanje trenutnim stanjem klastera. Omogućuje brojne operacije u druidskom klasteru poput izbora koordinatora / nadređenog vođe, protokola objavljivanja segmenata i protokola učitavanja / ispuštanja segmenata.

4. Postavljanje druida

Druid je dizajniran za upotrebu kao skalabilni klaster otporan na greške. Međutim, postavljanje druidskog klastera proizvodnog razreda nije trivijalno. Kao što smo vidjeli ranije, postoji mnogo procesa i vanjskih ovisnosti koje treba postaviti i konfigurirati. Kako je klaster moguće stvoriti na fleksibilan način, moramo obratiti pažnju na naše zahtjeve za odgovarajućim postavljanjem pojedinačnih procesa.

Također, Druid podržan je samo u okruženjima sličnim Unixu, a ne i u sustavu Windows. Štoviše, Java 8 ili novija verzija potrebna je za pokretanje druidskih procesa. Dostupno je nekoliko konfiguracija s jednim poslužiteljem za postavljanje Druida na jednom stroju za pokretanje vodiča i primjera. Međutim, za pokretanje proizvodnog radnog opterećenja preporuča se postaviti punopravni druidski klaster s više strojeva.

U svrhu ovog vodiča, mi ćemo postavili Druida na jednom stroju uz pomoć službene Dockerove slike objavljeno na Docker Hubu. To nam omogućuje pokretanje Druida i na sustavu Windows, koji, kao što smo ranije govorili, inače nije podržan. Dostupna je Dockerova datoteka za sastavljanje koja stvara spremnik za svaki druidski proces i njegove vanjske ovisnosti.

Mi moramo pružiti vrijednosti konfiguracije Druidu kao varijable okruženja. Najlakši način da se to postigne je pružiti datoteku nazvanu "okruženje" u istom direktoriju kao i Dockerova datoteka za sastavljanje.

Jednom kada pripremimo Docker za sastavljanje i datoteku okruženja, pokretanje Druida jednostavno je poput pokretanja naredbe u istom direktoriju:

docker-sastaviti

Ovo će otvoriti sve spremnike potrebne za postavljanje Druida s jednim strojem. Moramo biti oprezni kako bismo osigurali dovoljno memorije za Docker stroj, jer Druid troši značajnu količinu resursa.

5. Unošenje podataka

Prvi korak prema izgradnji podatkovnog cjevovoda pomoću Druida je učitavanje podataka u Druid. Ovaj postupak se naziva gutanjem podataka ili indeksiranjem u druidskoj arhitekturi. Moramo pronaći odgovarajući skup podataka da bismo nastavili s ovim vodičem.

Sad, kao što smo se do sada skupili, moramo pokupiti podatke koji su događaji i imaju neku vremensku prirodu, kako bi maksimalno iskoristili druidsku infrastrukturu.

Službeni vodič za Druide koristi jednostavne i elegantne podatke koji sadrže uređivanja stranica na Wikipediji za određeni datum. To ćemo i dalje koristiti za naš tutorial ovdje.

5.1. Model podataka

Počnimo s ispitivanjem strukture podataka koje imamo sa sobom. Većina podatkovnog cjevovoda koji stvaramo prilično je osjetljiva na anomalije podataka, pa je stoga potrebno podatke očistiti što je više moguće.

Iako postoje sofisticirani načini i alati za obavljanje analize podataka, počet ćemo vizualnim pregledom. Brza analiza to otkriva ulazni podaci imaju događaje zabilježene u JSON formatu, s jednim događajem koji sadrži tipične atribute:

{"time": "2015-09-12T02: 10: 26.679Z", "channel": "# pt.wikipedia", "cityName": null, "comment": "Houveram problemi na ultimativnoj edizaciji tipičnog refazê- las, junto com kao atualizações da página. "," countryIsoCode ":" BR "," countryName ":" Brazil "," isAnonymous ": true," isMinor ": false," isNew ": false," isRobot ": false , "isUnpatroll": true, "metroCode": null, "namespace": "Main", "page": "Catarina Muniz", "regionIsoCode": null, "regionName": null, "user": "181.213.37.148 "," delta ": 197," dodano ": 197," izbrisano ": 0}

Iako postoji čitav niz atributa koji definiraju ovaj događaj, postoji nekoliko koji su nam posebno zanimljivi u radu s Druidom:

  • Vremenska oznaka
  • Dimenzije
  • Metrika

Druid zahtijeva određeni atribut koji se identificira kao stupac vremenske oznake. U većini situacija Druidov analizator podataka može automatski prepoznati najboljeg kandidata. Ali uvijek imamo mogućnost izbora, pogotovo ako u svojim podacima nemamo atribut uklapanja.

Dimenzije su atributi koje Druid pohranjuje takvi kakvi jesu. Možemo ih koristiti u bilo koju svrhu, poput grupiranja, filtriranja ili primjene agregatora. Imamo izbor za odabir dimenzija u specifikaciji gutanja, o čemu ćemo dalje raspravljati u vodiču.

Mjerni podaci su atributi koji se, za razliku od dimenzija, pohranjuju u agregiranom obliku prema zadanim postavkama. Možemo odabrati funkciju agregiranja da se Druid primijeni na ove atribute tijekom gutanja. Zajedno s omogućenim skupljanjem, to može dovesti do kompaktnih prikaza podataka.

5.2. Metode gutanja

Sada ćemo razgovarati o raznim načinima na koje možemo izvršiti unos podataka u Druidu. Tipično, podaci vođeni događajima struje u prirodi, što znači da se tijekom vremena generiraju različitim tempom, poput uređivanja Wikipedije.

Međutim, možda ćemo imati podatke skupljene neko vrijeme da bismo ih pregledali, gdje su podaci više statični, kao i sva uređivanja na Wikipediji koja su se dogodila prošle godine.

Možemo imati i različite slučajeve korištenja podataka za rješavanje, a Druid za većinu od njih ima fantastičnu podršku. Pređimo na dva najčešća načina upotrebe Druida u podatkovnom cjevovodu:

  • Streaming gutanje
  • Skupno gutanje

The najčešći način unosa podataka u Druid je putem usluge Apache Streaming, gdje Druid može čitati podatke izravno s Kafke. Druid podržava i druge platforme poput Kinesisa. Moramo pokrenuti nadzornike u procesu Preopterećenja, koji stvara i upravlja Kafkinim zadacima indeksiranja. Supervizora možemo pokrenuti podnošenjem specifikacije supervizora kao JSON datoteke preko HTTP POST naredbe postupka Preopterećenje.

Alternativno, možemo unos podataka u paketu - na primjer, iz lokalne ili udaljene datoteke. Nudi izbor za grupno unošenje temeljem Hadoopa za unošenje podataka iz datotečnog sustava Hadoop u formatu datoteke Hadoop. Češće možemo odabrati izvorno unošenje šarže bilo uzastopno ili paralelno. To je prikladniji i jednostavniji pristup jer nema nikakve vanjske ovisnosti.

5.3. Definiranje specifikacije zadatka

Za ovaj vodič ćemo postaviti izvorni zadatak skupnog unosa za ulazne podatke imamo. Imamo mogućnost konfiguriranja zadatka s Druid konzole koja nam daje intuitivno grafičko sučelje. Naizmjence, mi može definirati specifikaciju zadatka kao JSON datoteku i predati je procesu nadređivanja pomoću skripte ili naredbenog retka.

Prvo definirajmo jednostavnu specifikaciju zadatka za unos naših podataka u datoteku koja se zove wikipedia-index.json:

{"type": "index_parallel", "spec": {"dataSchema": {"dataSource": "wikipedia", "sizesSpec": {"sizes": ["channel", "cityName", "comment", " countryIsoCode "," countryName "," isAnonymous "," isMinor "," isNew "," isRobot "," isUnpatroll "," metroCode "," namespace "," page "," regionIsoCode "," regionName "," user " , {"name": "added", "type": "long"}, {"name": "delete", "type": "long"}, {"name": "delta", "type": "long"}]}, "timestampSpec": {"column": "time", "format": "iso"}, "metricsSpec": [], "granularitySpec": {"type": "uniform", " segmentGranularity ":" day "," queryGranularity ":" none "," intervals ": [" 12.09.2015. / 13.09.2015. "]," rollup ": false}}," ioConfig ": {" type ":" index_parallel "," inputSource ": {" type ":" local "," baseDir ":" quickstart / tutorial / "," filter ":" wikiticker-2015-09-12-sampled.json.gz "} , "inputFormat": {"type": "json"}, "appendToExisting": false}, "tuningConfig": {"type": "index_parallel", "maxRowsPerSegment": 5000000, "maxRo wsInMemory ": 25000}}}

Razumijemo ovu specifikaciju zadatka s obzirom na osnove koje smo prošli u prethodnim pododjeljcima:

  • Odabrali smo indeks_paralelno zadatak, koji nam paralelno omogućuje unošenje matične serije
  • Izvor podataka koji ćemo koristiti u ovom zadatku ima naziv „wikipedia "
  • Vremenska oznaka za naše podatke dolazi iz atributa "vrijeme"
  • Postoji niz atributa podataka koje dodajemo kao dimenzije
  • U trenutnom zadatku ne koristimo nikakve mjerne podatke za naše podatke
  • Za ovaj zadatak treba onemogućiti sažimanje koje je omogućeno prema zadanim postavkama
  • Ulazni izvor za zadatak je lokalna datoteka s imenom wikiticker-2015-09-12-sampled.json.gz
  • Ne koristimo nijednu sekundarnu particiju, koju možemo definirati u tuningConfig

Ova specifikacija zadatka pretpostavlja da smo preuzeli podatkovnu datotekuwikiticker-2015-09-12-sampled.json.gz i zadržao ga na lokalnom stroju na kojem radi Druid. Ovo može biti nezgodnije kada Druid pokrećemo kao Docker-ov spremnik. Srećom, Druid dolazi s ovim uzorcima podataka koji su prema zadanim postavkama prisutni na mjestu brzi početak / vodič.

5.4. Slanje specifikacije zadatka

Konačno, ovu specifikaciju zadatka možemo predati procesu nadređivanja putem naredbenog retka pomoću alata poput kovrča:

curl -X 'POST' -H 'Content-Type: application / json' -d @ wikipedia-index.json // localhost: 8081 / druid / indexer / v1 / task

Normalno, redovno, gornja naredba vraća ID zadatka ako je podnošenje uspješno. Možemo provjeriti stanje zadatka gutanja putem konzole Druid ili izvođenjem upita, koje ćemo proći u sljedećem odjeljku.

5.5. Napredni koncepti gutanja

Druid je najprikladniji kada imamo masovne podatke s kojima se moramo nositi - sigurno ne one vrste podataka koje smo vidjeli u ovom vodiču! Sada, da bi omogućila značajke na veliko, druidska arhitektura mora pružiti prikladne alate i trikove.

Iako ih nećemo koristiti u ovom vodiču, razgovarajmo brzo o uvrštavanju i dijeljenju.

Podaci događaja uskoro mogu narasti do ogromnih volumena, što može utjecati na izvedbu upita koje možemo postići. U mnogim scenarijima može biti moguće sažimanje podataka tijekom vremena. To je ono što u Druidu znamo kao skupljanje. Kad je omogućeno uvijanje, Druid se trudi da zamotani redovi identičnih dimenzija i vremenskih žigova tijekom uzimanja. Iako može uštedjeti prostor, skupljanje doista dovodi do gubitka preciznosti upita, stoga ga moramo racionalno koristiti.

Drugi potencijalni način za postizanje boljih performansi u slučaju povećanja količine podataka je raspodjela podataka i, prema tome, radno opterećenje. Prema zadanim postavkama, Druid dijeli podatke na temelju vremenskih oznaka u vremenske dijelove koji sadrže jedan ili više segmenata. Nadalje, možemo se odlučiti za sekundarno particioniranje koristeći prirodne dimenzije kako bismo poboljšali lokalitet podataka. Štoviše, Druid prvo sortira podatke unutar svakog segmenta prema vremenskoj oznaci, a zatim prema drugim dimenzijama koje konfiguriramo.

6. Upitivanje podataka

Nakon što uspješno izvršimo unos podataka, trebali bismo biti spremni za upit. Postoji više načina za traženje podataka u Druidu. The najjednostavniji način izvršavanja upita u Druidu je putem Druid konzole. Međutim, upite možemo izvršavati i slanjem HTTP naredbi ili pomoću alata naredbenog retka.

Dva istaknuta načina za izgradnju upita u Druidu su izvorni upiti i upiti slični SQL-u. Idemo konstruirati neke osnovne upite na oba ova načina i poslati ih putem HTTP-a koristeći kovrča. Otkrijmo kako možemo stvoriti neke jednostavne upite o podacima koje smo unijeli ranije u Druidu.

6.1. Izvorni upiti

Izvorni upiti u Druidu koristite JSON objekte koje možemo poslati posredniku ili usmjerivaču na obradu. Upite možemo poslati putem naredbe HTTP POST, između ostalog, da učinimo isto.

Stvorimo JSON datoteku po imenu simple_query_native.json:

{"queryType": "topN", "dataSource": "wikipedia", "intervals": ["12.09.2015. / 13.09.2015."], "granularnost": "sve", "dimenzija": " stranica "," metric ":" count "," prag ": 10," agregacije ": [{" type ":" count "," name ":" count "}]}}

Ovo je jednostavan upit kojim se preuzima deset najboljih stranica koje su primile najveći broj uređivanja stranica između 12. i 13. rujna 2019.

Pošaljite ovo putem HTTP-a koristeći kovrča:

curl -X 'POST' -H 'Content-Type: application / json' -d @ simple_query_native.json // localhost: 8888 / druid / v2? pretty

Ovaj odgovor sadrži detalje o prvih deset stranica u JSON formatu:

[{"timestamp": "2015-09-12T00: 46: 58.771Z", "result": [{"count": 33, "page": "Wikipedia: Vandalismusmeldung"}, {"count": 28, " stranica ":" Korisnik: Cyde / Popis kandidata za brzo brisanje / podstranica "}, {" count ": 27," page ":" Jeremy Corbyn "}, {" count ": 21," page ":" Wikipedia: Obavijest administratora / Incidenti "}, {" count ": 20," page ":" Flavia Pennetta "}, {" count ": 18," page ":" Total Drama Presents: The Ridonculous Race "}, {" count ": 18," page ":" Korisnički razgovor: Dudeperson176123 "}, {" count ": 18," page ":" Wikipédia: Le Bistro / 12. rujna 2015 "}, {" count ": 17," page ": "Wikipedia: U vijestima / kandidatima"}, {"count": 17, "page": "Wikipedia: Zahtjevi za zaštitu stranica"}]}]

6.2. Druid SQL

Druid ima ugrađeni SQL sloj, koji nam nudi slobodu za konstruiranje upita u poznatim konstrukcijama sličnim SQL-u. Koristi Apache Calcite za raščlanjivanje i planiranje upita. Međutim, Druid SQL pretvara SQL upite u izvorne upite na brokeru upita prije nego što ih pošalje u podatkovne procese.

Pogledajmo kako možemo stvoriti isti upit kao i prije, ali koristeći Druid SQL. Kao i prije, izradit ćemo JSON datoteku po imenu simple_query_sql.json:

{"query": "SELECT page, COUNT (*) AS counts / FROM wikipedia WHERE \" __ time \ "/ IZMEĐU VREMENA '2015-09-12 00:00:00' I TIMESTAMP '2015-09-13 00:00 : 00 '/ GRUPIRAJ PO STRANI NARUČI PO UREĐENJIMA DESC LIMIT 10 "}

Napominjemo da je upit zbog čitljivosti podijeljen u više redaka, ali trebao bi se pojaviti u jednom retku. Ponovo ćemo, kao i prije, POSTAVITI ovaj upit putem HTTP-a, ali na drugu krajnju točku:

curl -X 'POST' -H 'Content-Type: application / json' -d @ simple_query_sql.json // localhost: 8888 / druid / v2 / sql

Izlaz bi trebao biti vrlo sličan onome što smo ranije postigli s izvornim upitom.

6.3. Vrste upita

U ranijem odjeljku vidjeli smo vrsta upita u kojem smo dohvatili prvih deset rezultata za metrički "count" na temelju intervala. Ovo je samo jedna vrsta upita koju podržava Druid, a poznata je kao VrhN upit. Naravno, možemo to učiniti jednostavno VrhN pitajte mnogo zanimljivije pomoću filtara i agregacija. Ali to nije u dosegu ovog vodiča. Međutim, postoji još nekoliko upita u Druidu koji bi nas mogli zanimati.

Neki od popularnih uključuju Timeseries i GroupBy.

Vremenske serije upiti vraćaju niz JSON objekata, gdje svaki objekt predstavlja vrijednost kako je opisano u upitu za vremensku seriju - na primjer, dnevni prosjek dimenzije za posljednji mjesec.

GroupBy upiti vraćaju niz JSON objekata, gdje svaki objekt predstavlja grupiranje kako je opisano u upitu za grupiranje. Na primjer, možemo tražiti dnevni prosjek dimenzije za prošli mjesec grupirani prema drugoj dimenziji.

Postoji nekoliko drugih vrsta upita, uključujući Skenirati, traži, Vremenska granica, SegmentMetadata, i DatasourceMetadata.

6.4. Napredni koncepti upita

Druid nudi neke složene metode za stvaranje sofisticiranih upita za stvaranje zanimljivih podatkovnih aplikacija. Uključuju razne načine za rezanje i isjecanje podataka, a pritom mogu pružiti nevjerojatne performanse upita.

Iako je detaljna rasprava o njima izvan opsega ovog vodiča, razgovarajmo neke od važnih poput Pridruživanja i pretraživanja, Multitenancy i Quaching Caching.

Druid podržava dva načina spajanja podataka. Prvi su operateri pridruživanja, a drugi su pretraživanja u vremenu upita. Međutim, radi bolje izvedbe upita, preporučljivo je izbjegavati pridruživanja u vremenu upita.

Multitenacija se odnosi na značajku podrške više stanara na istoj druidskoj infrastrukturi, a istovremeno im nudi logičnu izolaciju. To je moguće postići u Druidu odvojenim izvorima podataka po stanaru ili stanarskom particijom podataka.

I na kraju, predmemoriranje upita je ključ izvedbe u aplikacijama koje zahtijevaju podatke. Druid podržava predmemoriranje rezultata upita na segmentu i na razinama rezultata upita. Nadalje, podaci predmemorije mogu se nalaziti u memoriji ili u vanjskoj trajnoj pohrani.

7. Jezične veze

Iako Druid ima izvrsnu podršku za stvaranje specifikacija za gutanje i definiranje upita u JSON-u, on može biti dosadno ponekad definirati ove upite u JSON-u, posebno kada se upiti slože. Nažalost, Druid ne nudi klijentsku knjižnicu na bilo kojem određenom jeziku da bi nam pomogao u tom pogledu. Ali postoje dosta jezičnih veza koje je razvila zajednica. Jedna takva knjižnica klijenta dostupna je i za Javu.

Brzo ćemo vidjeti kako možemo graditi VrhN upit koji smo ranije koristili koristeći ovu knjižnicu klijenta u Javi.

Počnimo s definiranjem potrebne ovisnosti u Mavenu:

 in.zapr.druid druidry 2.14 

Nakon toga trebali bismo moći koristiti knjižnicu klijenta i stvoriti našu VrhN upit:

DateTime startTime = novo DateTime (2015, 9, 12, 0, 0, 0, DateTimeZone.UTC); DateTime endTime = novo DateTime (2015, 9, 13, 0, 0, 0, DateTimeZone.UTC); Intervalni interval = novi Interval (startTime, endTime); Granularnost granularnost = nova SimpleGranularity (PredefinedGranularity.ALL); Dimenzija DruidDimenzije = nova SimpleDimension ("stranica"); TopNMetric metric = novi SimpleMetric ("count"); DruidTopNQuery query = DruidTopNQuery.builder () .dataSource ("wikipedia") .dimenzija (dimenzija) .threshold (10) .topNMetric (metric) .granularity (granularity) .filter (filter) .aggregators (Arrays.asList (new LongSumAgist) "count", "count"))) .intervals (Collections.singletonList (interval)). build ();

Nakon toga možemo jednostavno generirati potrebnu JSON strukturu, koju možemo koristiti u HTTP POST pozivu:

Mapa ObjectMapper = novi ObjectMapper (); Potreban je nizJson = mapper.writeValueAsString (upit);

8. Zaključak

U ovom uputstvu smo prošli kroz osnove podataka o događajima i Apache Druid arhitekturu.

Nadalje, postavili smo primarni druid klaster koristeći Docker spremnike na našem lokalnom stroju. Zatim smo također prošli kroz proces unosa uzorka skupa podataka u Druidu koristeći izvorni batch zadatak. Nakon ovoga vidjeli smo različite načine na koje moramo tražiti svoje podatke u Druidu. Na kraju, prošli smo kroz klijentsku knjižnicu na Javi kako bismo konstruirali druidske upite.

Upravo smo ogrebali površinu značajki koje Druid nudi. Postoji nekoliko mogućnosti u kojima nam Druid može pomoći u izgradnji našeg podatkovnog cjevovoda i stvaranju podatkovnih aplikacija. Napredne značajke gutanja i ispitivanja očiti su sljedeći koraci za učinkovito učenje učinkovitog potencijala Druida.

Štoviše, stvaranje pogodnog druidskog klastera koji prilagođava pojedinačne procese prema potrebi trebao bi biti cilj za maksimiziranje koristi.