Ohjelmointi

Korjaa SQL-NoSQL-aukko Apache Phoenixin kanssa

Apache Phoenix on suhteellisen uusi avoimen lähdekoodin Java-projekti, joka tarjoaa JDBC-ohjaimen ja SQL-pääsyn Hadoopin NoSQL-tietokantaan: HBase. Se luotiin sisäisenä projektina Salesforcessa, avattiin GitHubista, ja siitä tuli huipputason Apache-projekti toukokuussa 2014. Jos sinulla on vahvat SQL-ohjelmointitaidot ja haluat käyttää niitä tehokkaalla NoSQL-tietokannalla, Phoenix voisi olla juuri sitä mitä etsit!

Tämä opas esittelee Java-kehittäjät Apache Phoenixiin. Koska Phoenix toimii HBasen päällä, aloitamme yleiskatsauksella HBasesta ja sen eroista relaatiotietokannoista. Opit kuinka Phoenix yhdistää SQL: n ja NoSQL: n välisen kuilun ja kuinka se on optimoitu toimimaan tehokkaasti HBasen kanssa. Kun nämä perusteet ovat poissa tieltä, vietämme artikkelin loppuosan oppimaan työskentelemään Phoenixin kanssa. Määrität ja integroit HBase: n ja Phoenixin, luot Java-sovelluksen, joka muodostaa yhteyden HBaseen Phoenixin kautta, ja kirjoitat ensimmäisen taulukon, lisäät tietoja ja suoritat siihen muutaman kyselyn.

Neljä tyyppiä NoSQL-tietovarastoa

On mielenkiintoista (ja hieman ironista), että NoSQL-tietovarastot on luokiteltu niiltä puuttuvilta ominaisuuksilta, nimittäin SQL. NoSQL-tietovarastoissa on neljä yleistä makua:

  1. Avain / arvo tallentaa kartoita tietty avain arvoon, joka voi olla asiakirja, taulukko tai yksinkertainen tyyppi. Esimerkkejä avain- / arvomyymälöistä ovat Memcached, Redis ja Riak.
  2. Asiakirjakaupat hallita asiakirjoja, jotka ovat yleensä skeemattomia rakenteita, kuten JSON, jotka voivat olla monimutkaisia. Suurin osa asiakirjakaupoista tarjoaa tukea ensisijaisille hakemistoille, toissijaisille hakemistoille ja monimutkaisille kyselyille. Esimerkkejä asiakirjakaupoista ovat MongoDB ja CouchBase.
  3. Kuvaajatietokannat keskity ensisijaisesti niiden objektien välisiin suhteisiin, joihin tietoja on tallennettu solmuihin, ja solmujen välisiin suhteisiin. Esimerkki kaaviotietokannasta on Neo4j.
  4. Sarakekohtaiset tietokannat tallentaa tietoja pikemminkin tietosarakkeiden osina kuin tietoriveinä. HBase on sarakekohtainen tietokanta, samoin kuin Cassandra.

HBase: Aluke

Apache HBase on NoSQL-tietokanta, joka toimii Hadoopin päällä hajautettuna ja skaalautuvana suurena tietovarastona. HBase on sarakekohtainen tietokanta, joka hyödyntää Hadoop Distributed File System (HDFS) -järjestelmän ja Hadoopin MapReduce-ohjelmointiparadigman hajautettuja käsittelyominaisuuksia. Se on suunniteltu isännöimään suuria taulukoita, joissa on miljardeja rivejä ja mahdollisesti miljoonia sarakkeita, jotka kaikki kulkevat hyödykelaitteiston klusterin yli.

Apache HBase yhdistää Hadoopin tehon ja skaalautuvuuden kykyyn hakea yksittäisiä tietueita ja suorittaa MapReduce-prosesseja.

Hadoopilta perittyjen ominaisuuksien lisäksi HBase on itsessään tehokas tietokanta: se yhdistää reaaliaikaiset kyselyt avain / arvo-tallennuksen nopeuteen, vankan taulukoiden skannausstrategian tietueiden nopeaan löytämiseen ja tukee eräkäsittelyä käyttämällä MapReducea. Sellaisena Apache HBase yhdistää Hadoopin tehon ja skaalautuvuuden kykyyn kysellä yksittäisiä tietueita ja suorittaa MapReduce-prosesseja.

HBasen tietomalli

HBase järjestää datan eri tavalla kuin perinteiset relaatiotietokannat tukemalla nelidimensionaalista datamallia, jossa kutakin "solua" edustaa neljä koordinaattia:

  1. Rivi-näppäin: Jokaisella rivillä on ainutlaatuinen rivinäppäin jota edustaa sisäisesti tavutaulukko, mutta jolla ei ole muodollista tietotyyppiä.
  2. Sarake perhe: Rivillä olevat tiedot on osioitu sarakeperheet; jokaisella rivillä on sama sarakeperhejoukko, mutta jokaisen sarakeperheen ei tarvitse ylläpitää samoja sarakemääritteitä. Voit ajatella sarakeperheitä olevan samanlaisia ​​kuin relaatiotietokannan taulukot.
  3. Sarakkeen karsinta: Nämä ovat samanlaisia ​​kuin relaatiotietokannan sarakkeet.
  4. Versio: Jokaisessa sarakkeessa voi olla määritettävä määrä versiot. Jos pyydät sarakkeessa olevia tietoja määrittelemättä versiota, saat uusimman version, mutta voit pyytää vanhempia versioita määrittämällä versionumeron.

Kuvassa 1 on esitetty, kuinka nämä neljä ulotteista koordinaattia liittyvät toisiinsa.

Steven Haines

Kuvion 1 malli osoittaa, että rivi koostuu riviavaimesta ja mielivaltaisesta joukosta sarakeperheitä. Jokainen riviavain liittyy kokoelmaan "rivejä taulukoissa", joista jokaisella on omat sarakkeet. Vaikka jokaisen taulukon on oltava olemassa, taulukoiden sarakkeet voivat olla erilaisia ​​riveittäin. Jokaisessa sarakeperheessä on joukko sarakkeita, ja jokaisessa sarakkeessa on joukko versioita, jotka yhdistyvät rivin todellisiin tietoihin.

Jos mallinnamme henkilöä, rivi-avain voi olla henkilön sosiaaliturvatunnus (yksilöidäkseen hänet), ja meillä voi olla sarakeperheitä, kuten osoite, työpaikka, koulutus ja niin edelleen. Sisällä osoite sarakeperheellä meillä voi olla katu-, kaupunki-, osavaltio- ja postinumero-sarakkeita, ja kukin versio voi vastata sitä, missä henkilö asui milloin tahansa. Uusin versio saattaa sisältää kaupungin "Los Angeles", kun taas edellisessä versiossa saattaa olla "New York". Näet tämän mallimallin kuvassa 2.

Steven Haines

Yhteenvetona voidaan todeta, että HBase on sarakekohtainen tietokanta, joka edustaa tietoja nelidimensionaalisessa mallissa. Se on rakennettu Hadoop Distributed File System (HDFS): n päälle, joka jakaa tietoja mahdollisesti tuhansien hyödykekoneiden kesken. Kehittäjät, jotka käyttävät HBasea, voivat käyttää tietoja suoraan avaamalla rivin avaimen, skannaamalla useita rivinäppäimiä tai käyttämällä eräkäsittelyä MapReducen kautta.

Perustutkimus

Saatat tuntea tai olla tuntematta kuuluisia (geeksille) Big Data White Papereita. Google Research julkaisi vuosina 2003-2006 nämä valkoiset kirjat esittivät Hadoop-ekosysteemin kolmen pilarin tutkimuksen sellaisena kuin se tunnetaan:

  • Google-tiedostojärjestelmä (GFS): Hadoop Distributed File System (HDFS) on GFS: n avoimen lähdekoodin toteutus ja määrittelee, miten data jaetaan hyödykekoneiden klusterin kesken.
  • MapReduce: Toimiva ohjelmointiparadigma HDFS-klusterille jaetun datan analysointiin.
  • Bigtable: Hajautettu tallennusjärjestelmä jäsenneltyjen tietojen hallitsemiseksi, joka on suunniteltu skaalattavaksi erittäin suuriksi kooiksi - petatavuina dataa tuhansissa hyödykekoneissa. HBase on Bigtable-ohjelman avoimen lähdekoodin toteutus.

NoSQL-aukon kurominen: Apache Phoenix

Apache Phoenix on ylätason Apache-projekti, joka tarjoaa SQL-käyttöliittymän HBaselle, kartoittamalla HBase-mallit relaatiotietokantamaailmaan. Tietenkin HBase tarjoaa oman sovellusliittymän ja kuoren sellaisten toimintojen suorittamiseen kuin skannaus, hakeminen, asettaminen, luettelointi ja niin edelleen, mutta useammat kehittäjät tuntevat SQL: n kuin NoSQL: n. Phoenixin tavoitteena on tarjota yleisesti ymmärretty käyttöliittymä HBaselle.

Ominaisuuksien suhteen Phoenix tekee seuraavaa:

  • Tarjoaa JDBC-ohjaimen vuorovaikutukseen HBasen kanssa.
  • Tukee suurta osaa ANSI SQL -standardista.
  • Tukee DDL-toimintoja, kuten CREATE TABLE, DROP TABLE ja ALTER TABLE.
  • Tukee DML-toimintoja, kuten UPSERT ja DELETE.
  • Koostaa SQL-kyselyt alkuperäisiin HBase-skannauksiin ja kartoittaa vastauksen sitten JDBC ResultSetsiin.
  • Tukee versioituja skeemejä.

Sen lisäksi, että Phoenix tukee laajaa joukkoa SQL-toimintoja, se on myös erittäin suorituskykyinen. Se analysoi SQL-kyselyt, jakaa ne useisiin HBase-skannauksiin ja suorittaa ne rinnakkain käyttämällä natiivia API: ta MapReduce-prosessien sijaan.

Phoenix käyttää kahta strategiaa - yhteisprosessoreita ja mukautettuja suodattimia - tuodakseen laskelmat lähemmäksi tietoja:

  • Yhteisprosessorit suorittaa palvelimella toimintoja, mikä minimoi asiakkaan / palvelimen tiedonsiirron.
  • Mukautetut suodattimet vähentää palvelimelta kyselyvastauksessa palautettujen tietojen määrää, mikä vähentää edelleen siirrettyjen tietojen määrää. Muokattuja suodattimia käytetään muutamalla tavalla:
    1. Kyselyä suoritettaessa mukautettua suodatinta voidaan käyttää vain haun tyydyttämiseen tarvittavien olennaisten sarakeperheiden tunnistamiseen.
    2. A ohita skannaussuodatin käyttää HBasen SEEK_NEXT_USING_HINT-painiketta siirtyäksesi nopeasti tietueesta toiseen, mikä nopeuttaa pistekyselyjä.
    3. Mukautettu suodatin voi "suolata tiedot", mikä tarkoittaa, että se lisää hash-tavun rivin avaimen alkuun, jotta se voi löytää tietueet nopeasti.

Yhteenvetona voidaan todeta, että Phoenix hyödyntää suoraa pääsyä HBase-sovellusliittymiin, yhteisprosessoreihin ja mukautettuihin suodattimiin, jotta saat millisekunnin tason suorituskyvyn pienille tietojoukoille ja toisen tason suorituskyvyn ihmisille. Ennen kaikkea Phoenix paljastaa nämä ominaisuudet kehittäjille tutun JDBC- ja SQL-käyttöliittymän kautta.

Aloita Phoenixin kanssa

Jotta voit käyttää Phoenixia, sinun on ladattava ja asennettava sekä HBase että Phoenix. Löydät Phoenix-lataussivun (ja HBase-yhteensopivuusohjeet) täältä.

Lataa ja asenna

Tämän kirjoituksen aikana Phoenixin uusin versio on 4.6.0 ja lataussivulla lukee, että 4.x on yhteensopiva HBase-version 0.98.1+ kanssa. Esimerkiksi ladasin Phoenixin uusimman version, joka on määritetty toimimaan HBase 1.1: n kanssa. Löydät sen kansiosta: feeniks-4.6.0-HBase-1.1 /.

Tässä on asennus:

  1. Lataa ja pura tämä arkisto ja lataa sitten HBase jollakin tässä suositelluista peilisivuista. Esimerkiksi valitsin peilin, navigoin 1.1.2-kansioon ja latain hbase-1.1.2-bin.tar.gz.
  2. Pura tämä tiedosto ja luo HBASE_HOME sitä osoittava ympäristömuuttuja; esimerkiksi lisäsin seuraava omaan ~ / .bash_profile tiedosto (Mac): vie HBASE_HOME = / Käyttäjät / shaines / Lataukset / hbase-1.1.2.

Integroi Phoenix HBaseen

Prosessi Phoenixin integroimiseksi HBaseen on yksinkertainen:

  1. Kopioi seuraava tiedosto Phoenixin juurihakemistosta HBaseen lib hakemisto: phoenix-4.6.0-HBase-1.1-server.jar.
  2. Käynnistä HBase suorittamalla seuraava komentosarja HBasesta bin hakemisto:./start-hbase.sh.
  3. Kun HBase on käynnissä, testaa Phoenixin toiminta suorittamalla SQLLine-konsoli suorittamalla seuraava komento Phoenixin bin hakemisto: ./sqlline.py localhost.

SQLLine-konsoli

sqlline.py on Python-komentosarja, joka käynnistää konsolin, joka muodostaa yhteyden HBasen Zookeeper-osoitteeseen; paikallinen isäntä tässä tapauksessa. Voit käydä läpi esimerkin, jonka aion tiivistää tässä osiossa.

Katsotaan ensin ensin kaikki HBasen taulukot suorittamalla !pöytä:

 0: jdbc: phoenix: localhost>! Taulukot + --------------------------------------- --- + ------------------------------------------ + --- --------------------------------------- + ---------- -------------------------------- + ----------------- --------- + | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | HUOMAUTUKSET | + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + | | JÄRJESTELMÄ | LUETTELO | JÄRJESTELMÄTAULUKKO | | | | JÄRJESTELMÄ | TOIMINTA | JÄRJESTELMÄTAULUKKO | | | | JÄRJESTELMÄ | Sekvenssi | JÄRJESTELMÄTAULUKKO | | | | JÄRJESTELMÄ | TILASTOT | JÄRJESTELMÄTAULUKKO | | + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + 

Koska tämä on uusi HBase-esiintymä, ainoat olemassa olevat taulukot ovat järjestelmätaulukoita. Voit luoda taulukon suorittamalla a luo taulukko komento:

 0: jdbc: feeniks: paikallinen isäntä>luoda taulukon testi (avaimen kokonaisluku ei nolla ensisijainen avain, mycolumn varchar); Ei rivejä (2.448 sekuntia) 

Tämä komento luo taulukon nimeltä testata, jonka kokonaisluku on ensisijainen avain avaimeni ja a Varchar nimetty sarake mycolumn. Lisää nyt pari riviä käyttämällä ylöspäin komento:

 0: jdbc: feeniks: paikallinen isäntä>siirtyä testiarvoihin (1, 'Hei'); 1 rivi vaikuttaa (0,142 sekuntia) 0: jdbc: feeniks: paikallinen isäntä>nousta testiarvoihin (2, 'Maailma!'); 1 rivi vaikuttaa (0,008 sekuntia) 

UPSERT on SQL-komento tietueen lisäämiseksi, jos sitä ei ole, tai päivittää tietue, jos on. Tässä tapauksessa lisäsimme (1, "Hei") ja (2, "Maailma!"). Löydät täydellisen Phoenix-komentoviitteen täältä. Kysele lopuksi taulukosta nähdäksesi arvot, jotka korotit suorittamalla valitse testistä *:

 0: jdbc: feeniks: paikallinen isäntä>valitse * testistä; + ------------------------------------------ + ------ ------------------------------------ + | MYKEY | MYCOLUMN | + ------------------------------------------ + ------ ------------------------------------ + | 1 | Hei | | 2 | Maailman! | + ------------------------------------------ + ------ ------------------------------------ + 2 riviä valittu (0,111 sekuntia) 

Odotetusti näet juuri lisäämäsi arvot. Jos haluat siivota pöydän, suorita a pudota pöytä testi komento.

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