Programiranje

Premostite vrzel SQL-NoSQL z Apache Phoenix

Apache Phoenix je razmeroma nov odprtokodni projekt Java, ki ponuja gonilnik JDBC in dostop do SQL do Hadoopove baze podatkov NoSQL: HBase. Ustvarjen je bil kot interni projekt pri Salesforce, odprt je bil na GitHub-u, in je postal vrhunski projekt Apache maja 2014. Če imate močna znanja programiranja SQL in bi jih radi uporabljali z zmogljivo bazo podatkov NoSQL, Phoenix lahko točno tisto, kar iščete!

Ta vadnica razvijalce Jave predstavlja v Apache Phoenixu. Ker Phoenix deluje na vrhu HBase, bomo začeli s pregledom HBase in kako se razlikuje od relacijskih baz podatkov. Izvedeli boste, kako Phoenix premosti vrzel med SQL in NoSQL ter kako je optimiziran za učinkovito interakcijo s HBase. S temi osnovami se bomo osredotočili na preostanek članka, kjer se bomo naučili delati s Phoenixom. Nastavili in integrirali boste HBase in Phoenix, ustvarili program Java, ki se prek Phoenixa poveže z HBase, in napisali boste svojo prvo tabelo, vstavili podatke in nanjo zagnali nekaj poizvedb.

Štiri vrste shranjevanja podatkov NoSQL

Zanimivo je (in nekoliko ironično), da so shrambe podatkov NoSQL razvrščene po lastnostih, ki jim manjkajo, in sicer SQL. Zaloge podatkov NoSQL so na voljo v štirih splošnih okusih:

  1. Shrambe ključev / vrednosti preslikajte določen ključ na vrednost, ki je lahko dokument, matrika ali preprost tip. Primeri shramb ključev / vrednosti vključujejo Memcached, Redis in Riak.
  2. Trgovine z dokumenti upravljati dokumente, ki so običajno strukture brez shem, kot je JSON, ki so lahko poljubne zapletenosti. Večina shramb dokumentov nudi podporo tako za primarne indekse kot tudi za sekundarne indekse in zapletene poizvedbe. Primeri shramb dokumentov vključujejo MongoDB in CouchBase.
  3. Grafične zbirke podatkov osredotočiti predvsem na razmerja med predmeti, v katerih so podatki shranjeni v vozliščih, in na razmerja med vozlišči. Primer baze podatkov grafov je Neo4j.
  4. Stolpno usmerjene zbirke podatkov shranjujte podatke kot odseke stolpcev podatkov in ne kot vrstice podatkov. HBase je stolpčno usmerjena baza podatkov, Cassandra pa tudi.

HBase: temeljni premaz

Apache HBase je baza podatkov NoSQL, ki deluje na vrhu Hadoopa kot porazdeljena in razširljiva velika podatkovna shramba. HBase je stolpčno usmerjena baza podatkov, ki izkorišča porazdeljene zmogljivosti obdelave distribuiranega datotečnega sistema Hadoop (HDFS) in programske paradigme Hadoop's MapReduce. Zasnovan je bil za gostovanje velikih tabel z milijardami vrstic in potencialno milijoni stolpcev, ki se izvajajo skozi skupino blagovne strojne opreme.

Apache HBase združuje moč in razširljivost Hadoopa s sposobnostjo poizvedovanja po posameznih zapisih in izvajanja procesov MapReduce.

Poleg zmogljivosti, ki jih je podedoval Hadoop, je HBase tudi sama po sebi zmogljiva baza podatkov: združuje poizvedbe v realnem času s hitrostjo shrambe ključ / vrednost, robustno strategijo pregledovanja tabel za hitro iskanje zapisov in podpira serijsko obdelavo z uporabo MapReduce. Kot taka Apache HBase združuje moč in razširljivost Hadoopa z možnostjo poizvedovanja po posameznih zapisih in izvajanja procesov MapReduce.

Podatkovni model HBase

HBase organizira podatke drugače kot tradicionalne relacijske baze podatkov in podpira štiridimenzionalni podatkovni model, v katerem je vsaka "celica" predstavljena s štirimi koordinatami:

  1. Vrstni ključ: Vsaka vrstica ima unikat tipka vrstice ki je interno predstavljena z bajtno matriko, vendar nima nobenega formalnega podatkovnega tipa.
  2. Družina stolpcev: Podatki v vrstici so razdeljeni na družine stolpcev; vsaka vrstica ima enak nabor družin stolpcev, vendar vsaki družini stolpcev ni treba vzdrževati enakega nabora kvalifikatorjev stolpcev. Družine stolpcev si lahko predstavljate kot podobne tabelam v relacijski bazi podatkov.
  3. Kvalifikator stolpca: Ti so podobni stolpcem v relacijski bazi podatkov.
  4. Različica: Vsak stolpec ima lahko nastavljivo število različice. Če zahtevate podatke v stolpcu, ne da bi navedli različico, prejmete najnovejšo različico, starejše različice pa lahko zahtevate z navedbo številke različice.

Slika 1 prikazuje, kako so te štiridimenzionalne koordinate povezane.

Steven Haines

Model na sliki 1 kaže, da je vrstica sestavljena iz ključa vrstice in poljubnega števila družin stolpcev. Vsak ključ vrstice je povezan z zbirko "vrstic v tabelah", od katerih ima vsaka svoje stolpce. Vsaka tabela mora obstajati, vendar so stolpci v tabelah lahko različni v vrsticah. Vsaka družina stolpcev ima nabor stolpcev, vsak stolpec pa nabor različic, ki se preslikajo na dejanske podatke v vrstici.

Če bi modelirali osebo, bi bila lahko ključ vrstice številka socialne varnosti osebe (da bi jo enoznačno prepoznali) in morda bi imeli družine stolpcev, kot so naslov, zaposlitev, izobrazba itd. Znotraj naslov družina stolpcev, lahko imamo stolpce z ulicami, mesti, zveznimi državami in poštnimi številkami, vsaka različica pa lahko ustreza temu, kje je oseba v določenem trenutku živela. V najnovejši različici je morda mesto "Los Angeles", v prejšnji pa "New York". Ta primer modela lahko vidite na sliki 2.

Steven Haines

Če povzamemo, je HBase stolpčno usmerjena baza podatkov, ki predstavlja podatke v štiridimenzionalnem modelu. Zgrajen je na Hadoop Distributed File System (HDFS), ki razdeli podatke na potencialno tisoče blagovnih strojev. Razvijalci, ki uporabljajo HBase, lahko neposredno dostopajo do podatkov z dostopom do ključa vrstice, s skeniranjem po številnih tipkah vrstic ali s paketno obdelavo prek MapReduce.

Temeljne raziskave

Znani ali ne poznate slavnih (za geeke) Big Data White Papers. V teh belih knjigah, ki jih je objavil Google Research med letoma 2003 in 2006, so predstavljene raziskave treh stebrov ekosistema Hadoop, kot ga poznamo:

  • Googlov datotečni sistem (GFS): Distribuirani datotečni sistem Hadoop (HDFS) je odprtokodna izvedba GFS in določa, kako se podatki razdelijo po gruči blagovnih strojev.
  • MapReduce: Paradigma funkcionalnega programiranja za analizo podatkov, ki so porazdeljeni po gruči HDFS.
  • Bigtable: porazdeljeni sistem za shranjevanje za upravljanje strukturiranih podatkov, ki je zasnovan tako, da se razširi na zelo velike velikosti - petabajte podatkov v tisočih blagovnih strojih. HBase je odprtokodna izvedba Bigtablea.

Premostitev vrzeli NoSQL: Apache Phoenix

Apache Phoenix je projekt Apache na najvišji ravni, ki ponuja vmesnik SQL za HBase in preslikava modele HBase v svet relacijskih baz podatkov. Seveda HBase ponuja svoj API in lupino za izvajanje funkcij, kot so skeniranje, pridobivanje, postavljanje, seznam itd., Toda več razvijalcev SQL pozna kot NoSQL. Cilj Phoenixa je zagotoviti splošno razumljiv vmesnik za HBase.

Kar zadeva lastnosti, Phoenix počne naslednje:

  • Ponuja gonilnik JDBC za interakcijo s HBase.
  • Podpira večino standarda ANSI SQL.
  • Podpira DDL operacije, kot so USTVARI TABELO, PADAJ TABELO in ALTER TABELO.
  • Podpira operacije DML, kot sta UPSERT in DELETE.
  • Poizvedbe SQL prevede v domače skeniranje HBase in nato preslika odziv v JDBC ResultSets.
  • Podpira verzijske sheme.

Poleg tega, da podpira širok nabor operacij SQL, je Phoenix tudi zelo uspešen. Analizira poizvedbe SQL, jih razdeli na več skeniranj HBase in jih vzporedno izvaja z uporabo izvornega API-ja namesto procesov MapReduce.

Phoenix uporablja dve strategiji - soprocesorje in filtre po meri - za približevanje izračunov podatkom:

  • Soprocesorji izvajati operacije na strežniku, kar zmanjša prenos podatkov odjemalec / strežnik.
  • Filtri po meri zmanjšati količino podatkov, vrnjenih v odgovoru na poizvedbo s strežnika, kar še zmanjša količino prenesenih podatkov. Filtri po meri se uporabljajo na nekaj načinov:
    1. Pri izvajanju poizvedbe lahko filter po meri uporabite za prepoznavanje samo bistvenih družin stolpcev, potrebnih za izpolnitev iskanja.
    2. A preskoči filter za skeniranje uporablja HBase-jev SEEK_NEXT_USING_HINT za hitro krmarjenje od enega zapisa do drugega, kar pospeši poizvedbe po točkah.
    3. Filter po meri lahko "posoli podatke", kar pomeni, da na začetku ključa vrstice doda razpršeni bajt, da lahko hitro poišče zapise.

Če povzamemo, Phoenix izkoristi neposreden dostop do API-jev HBase, soprocesorjev in filtrov po meri, da vam zagotovi zmogljivost na milisekundah za majhne nabore podatkov in zmogljivost druge ravni za velike. Predvsem pa Phoenix razkriva te zmožnosti razvijalcem prek znanega vmesnika JDBC in SQL.

Začnite s Phoenixom

Če želite uporabljati Phoenix, morate prenesti in namestiti tako HBase kot Phoenix. Stran za prenos Phoenixa (in opombe o združljivosti s HBase) najdete tukaj.

Prenos in namestitev

V času pisanja tega članka je najnovejša različica Phoenixa 4.6.0, na strani za prenos pa piše, da je 4.x združljiv z različico HBase 0.98.1+. Za svoj primer sem prenesel najnovejšo različico Phoenixa, ki je konfigurirana za delo s HBase 1.1. Najdete ga v mapi: feniks-4.6.0-HBaza-1.1 /.

Tukaj je nastavitev:

  1. Prenesite in razpakirajte ta arhiv in nato za prenos HBase uporabite eno od priporočenih zrcalnih strani tukaj. Izbral sem na primer ogledalo, se pomaknil v mapo 1.1.2 in prenesel hbase-1.1.2-bin.tar.gz.
  2. Razpakirajte to datoteko in ustvarite datoteko HBASE_HOME okoljska spremenljivka, ki kaže nanjo; na primer, svojemu sem dodal naslednje ~ / .bash_profile datoteka (na Macu): izvoz HBASE_HOME = / Users / shaines / Downloads / hbase-1.1.2.

Integrirajte Phoenix s HBase

Postopek za vključitev Phoenixa v HBase je preprost:

  1. Kopirajte naslednjo datoteko iz korenskega imenika Phoenix v HBase lib imenik: phoenix-4.6.0-HBase-1.1-server.jar.
  2. Začnite HBase z izvajanjem naslednjega skripta iz HBase's zabojnik imenik:./start-hbase.sh.
  3. Ko deluje HBase, preverite, ali Phoenix deluje, tako da zaženete konzolo SQLLine, tako da izvedete naslednji ukaz iz Phoenixove zabojnik imenik: ./sqlline.py localhost.

Konzola SQLLine

sqlline.py je skript Python, ki zažene konzolo, ki se poveže z naslovom HBase's Zookeeper; lokalni gostitelj v tem primeru. Tu lahko preberete primer, ki ga bom povzel v tem poglavju.

Najprej si oglejmo vse tabele v HBase z izvajanjem ! miza:

 0: jdbc: phoenix: localhost>! Tabele + --------------------------------------- --- + ------------------------------------------ + --- --------------------------------------- + ---------- -------------------------------- + ----------------- --------- + | TABLE_CAT | TABELA_SCHEM | TABLE_NAME | TABLE_TYPE | OPOMBE | + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + | | SISTEM | KATALOG | SISTEMSKA TABELA | | | | SISTEM | FUNKCIJA | SISTEMSKA TABELA | | | | SISTEM | ZAPOREDJE | SISTEMSKA TABELA | | | | SISTEM | STATISTIKA | SISTEMSKA TABELA | | + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + 

Ker gre za nov primerek HBase, so edine tabele, ki obstajajo, sistemske tabele. Tabelo lahko ustvarite z izvajanjem ustvari tabelo ukaz:

 0: jdbc: phoenix: localhost>ustvari preizkus tabele (mykey integer ni null primarni ključ, mycolumn varchar); Nobena vrstica ni prizadeta (2,448 sekunde) 

Ta ukaz ustvari tabelo z imenom preskus, s poimenovanim celoštevilskim primarnim ključem mykey in a varchar imenovan stolpec mycolumn. Zdaj vstavite nekaj vrstic z uporabo upsert ukaz:

 0: jdbc: phoenix: localhost>vstavite v testne vrednosti (1, 'Hello'); 1 vrstica prizadeta (0,142 sekunde) 0: jdbc: phoenix: localhost>navzgor v testne vrednosti (2, 'Svet!'); 1 vrstica prizadeta (0,008 sekunde) 

UPSERT je ukaz SQL za vstavljanje zapisa, če ta ne obstaja, ali posodabljanje zapisa, če obstaja. V tem primeru smo vstavili (1, 'Pozdravljeni') in (2, 'Svet!'). Celotno referenco za ukaze Phoenix najdete tukaj. Na koncu poizvedite svojo tabelo, da vidite vrednosti, ki ste jih nadgradili z izvajanjem izberite * iz testa:

 0: jdbc: phoenix: localhost>izberite * med testom; + ------------------------------------------ + ------ ------------------------------------ + | MYKEY | MIKOLON | + ------------------------------------------ + ------ ------------------------------------ + | 1 | Pozdravljeni | 2 | Svet! | + ------------------------------------------ + ------ ------------------------------------ + 2 izbrani vrstici (0,111 sekunde) 

Kot ste pričakovali, boste videli vrednosti, ki ste jih pravkar vstavili. Če želite očistiti mizo, zaženite a test spustne mize ukaz.

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