Programovanie

Prekonajte priepasť SQL-NoSQL s Apache Phoenix

Apache Phoenix je relatívne nový open source projekt Java, ktorý poskytuje ovládač JDBC a prístup SQL k NoSQL databáze Hadoop: HBase. Bol vytvorený ako interný projekt v spoločnosti Salesforce, otvorený na GitHub a v máji 2014 sa stal projektom Apache na najvyššej úrovni. Ak máte silné znalosti programovania v SQL a chceli by ste ich byť schopní používať s výkonnou databázou NoSQL, Phoenix môže byť presne to, čo hľadáte!

Tento výukový program predstavuje vývojárov Java pre Apache Phoenix. Pretože Phoenix beží na vrchole HBase, začneme s prehľadom HBase a ako sa líši od relačných databáz. Dozviete sa, ako Phoenix preklenuje priepasť medzi SQL a NoSQL a ako je optimalizovaný na efektívnu interakciu s HBase. Keď tieto základy prekonáme, strávime zvyšok článku tým, že sa naučíme pracovať s Phoenixom. Nastavíte a integrujete HBase a Phoenix, vytvoríte aplikáciu Java, ktorá sa pripojí k HBase cez Phoenix, a napíšete svoju prvú tabuľku, vložíte údaje a spustíte na ňu niekoľko dotazov.

Štyri typy dátových úložísk NoSQL

Je zaujímavé (a trochu ironické), že dátové úložiská NoSQL sú kategorizované podľa funkcie, ktorá im chýba, a to SQL. Úložiská dát NoSQL majú štyri všeobecné príchute:

  1. Obchody kľúč / hodnota namapujte konkrétny kľúč na hodnotu, čo môže byť dokument, pole alebo jednoduchý typ. Medzi príklady obchodov kľúč / hodnota patria Memcached, Redis a Riak.
  2. Obchody s dokumentmi spravujte dokumenty, ktoré sú zvyčajne štruktúrami bez schémy, ako je JSON, ktoré môžu byť ľubovoľne zložité. Väčšina obchodov s dokumentmi poskytuje podporu pre primárne indexy, ako aj pre sekundárne indexy a zložité dotazy. Medzi príklady obchodov s dokumentmi patria MongoDB a CouchBase.
  3. Databázy grafov zamerať sa predovšetkým na vzťahy medzi objektmi, v ktorých sú údaje uložené v uzloch, a na vzťahy medzi uzlami. Príkladom databázy grafov je Neo4j.
  4. Stĺpcovo orientované databázy ukladať údaje skôr do sekcií stĺpcov údajov ako do riadkov údajov. HBase je stĺpcovo orientovaná databáza, rovnako ako aj Cassandra.

HBase: Základný náter

Apache HBase je NoSQL databáza, ktorá beží nad Hadoopom ako distribuované a škálovateľné veľké úložisko dát. HBase je stĺpcovo orientovaná databáza, ktorá využíva možnosti distribuovaného spracovania systému Hadoop Distributed File System (HDFS) a programovacej paradigmy Hadoop MapReduce. Bol navrhnutý tak, aby hostil veľké tabuľky s miliardami riadkov a potenciálne miliónmi stĺpcov, ktoré všetky bežia v klastri komoditného hardvéru.

Apache HBase kombinuje výkon a škálovateľnosť Hadoopu so schopnosťou dopytovať sa po jednotlivých záznamoch a spúšťať procesy MapReduce.

Kromě schopností převzatých z Hadoopu je HBase samostatnou výkonnou databázou: kombinuje dotazy v reálnom čase s rýchlosťou ukladacieho priestoru kľúčov / hodnôt, robustnú stratégiu skenovania tabuľky pre rýchle vyhľadanie záznamov a podporuje dávkové spracovanie. pomocou MapReduce. Apache HBase ako taký kombinuje výkon a škálovateľnosť Hadoopu so schopnosťou vyhľadávať jednotlivé záznamy a vykonávať procesy MapReduce.

Dátový model HBase

HBase organizuje údaje odlišne od tradičných relačných databáz, podporuje štvorrozmerný dátový model, v ktorom je každá „bunka“ predstavovaná štyrmi súradnicami:

  1. Kľúč riadku: Každý riadok má svoj vlastný kľúč riadku ktorý je interne reprezentovaný bajtovým poľom, ale nemá žiadny formálny dátový typ.
  2. Rodina stĺpcov: Dáta obsiahnuté v riadku sú rozdelené na stĺpcové rodiny; každý riadok má rovnakú sadu rodín stĺpcov, ale každá rodina stĺpcov nemusí udržiavať rovnakú sadu kvalifikátorov stĺpcov. Môžete si myslieť, že rodiny stĺpcov sú podobné tabuľkám v relačnej databáze.
  3. Kvalifikátor stĺpca: Sú podobné stĺpcom v relačnej databáze.
  4. Verzia: Každý stĺpec môže mať konfigurovateľný počet verzie. Ak požadujete údaje obsiahnuté v stĺpci bez uvedenia verzie, dostanete najnovšiu verziu, ale môžete požiadať o staršie verzie zadaním čísla verzie.

Obrázok 1 ukazuje, ako tieto štvorrozmerné súradnice súvisia.

Steven Haines

Model na obrázku 1 ukazuje, že riadok sa skladá z kľúča riadku a ľubovoľného počtu skupín stĺpcov. Každý kľúč riadku je priradený k kolekcii „riadkov v tabuľkách“, z ktorých každý má svoje vlastné stĺpce. Aj keď každá tabuľka musí existovať, stĺpce v tabuľkách sa môžu v jednotlivých riadkoch líšiť. Každá rodina stĺpcov má množinu stĺpcov a každý stĺpec má množinu verzií, ktoré sa mapujú na skutočné údaje v riadku.

Ak by sme modelovali osobu, kľúčom v rade by mohlo byť číslo sociálneho zabezpečenia osoby (na jednoznačnú identifikáciu) a mohli by sme mať rodiny stĺpcov, ako je adresa, zamestnanie, vzdelanie atď. Vnútri adresa z rodiny stĺpcov môžeme mať stĺpce ulice, mesta, štátu a PSČ a každá verzia môže zodpovedať miestu, kde daná osoba v danom čase žila. Posledná verzia môže obsahovať zoznam mesta „Los Angeles“, zatiaľ čo predchádzajúca verzia môže obsahovať „New York“. Tento príkladný model môžete vidieť na obrázku 2.

Steven Haines

Stručne povedané, HBase je stĺpcovo orientovaná databáza, ktorá predstavuje údaje v štvorrozmernom modeli. Je postavený na vrchole systému Hadoop Distributed File System (HDFS), ktorý rozdeľuje údaje na potenciálne tisíce komoditných strojov. Vývojári používajúci HBase môžu pristupovať k dátam priamo prístupom ku kľúču riadku, skenovaním cez celý rad kľúčov riadkov alebo pomocou dávkového spracovania cez MapReduce.

Základný výskum

Možno budete alebo nemusíte byť oboznámení so slávnymi (pre geekov) Big Data White Papers. Tieto publikácie publikované spoločnosťou Google Research v rokoch 2003 až 2006 predstavili výskum troch pilierov ekosystému Hadoop, ako ich poznáme:

  • Google File System (GFS): Hadoop Distributed File System (HDFS) je implementácia open source systému GFS a definuje spôsob distribúcie údajov v klastri komoditných strojov.
  • MapReduce: Paradigma funkčného programovania na analýzu údajov distribuovaných v klastri HDFS.
  • Bigtable: Distribuovaný úložný systém na správu štruktúrovaných údajov, ktorý je navrhnutý na zväčšenie na veľmi veľké veľkosti - petabajty dát naprieč tisíckami komoditných strojov. HBase je open source implementácia Bigtable.

Preklenutie medzery v NoSQL: Apache Phoenix

Apache Phoenix je projekt najvyššej úrovne Apache, ktorý poskytuje rozhranie SQL pre HBase a mapuje modely HBase na svet relačných databáz. HBase samozrejme poskytuje svoje vlastné API a shell na vykonávanie funkcií, ako je skenovanie, získavanie, ukladanie, zoznam atď., Ale viac vývojárov pozná SQL ako NoSQL. Cieľom spoločnosti Phoenix je poskytnúť bežne chápané rozhranie pre HBase.

Čo sa týka funkcií, Phoenix robí nasledovné:

  • Poskytuje ovládač JDBC pre interakciu s HBase.
  • Podporuje veľkú časť štandardu ANSI SQL.
  • Podporuje operácie DDL, ako napríklad CREATE TABLE, DROP TABLE a ALTER TABLE.
  • Podporuje operácie DML, ako napríklad UPSERT a DELETE.
  • Zkompiluje dotazy SQL do natívnych skenov HBase a potom mapuje odpoveď na sady výsledkov JDBC.
  • Podporuje verzované schémy.

Okrem podpory rozsiahlej sady operácií SQL je Phoenix tiež veľmi vysoký. Analyzuje SQL dotazy, rozdeľuje ich na viac skenov HBase a spúšťa ich paralelne pomocou natívneho API namiesto procesov MapReduce.

Phoenix používa dve stratégie - koprocesory a vlastné filtre - na priblíženie výpočtov k údajom:

  • Spolupracovatelia vykonávať operácie na serveri, čo minimalizuje prenos dát klient / server.
  • Vlastné filtre znížiť množstvo dát vrátených v odpovedi na dotaz zo servera, čo ďalej zníži množstvo prenesených dát. Vlastné filtre sa používajú niekoľkými spôsobmi:
    1. Pri vykonávaní dotazu je možné použiť vlastný filter na identifikáciu iba základných skupín stĺpcov potrebných na uspokojenie vyhľadávania.
    2. A preskočiť skenovací filter používa funkciu SEEK_NEXT_USING_HINT spoločnosti HBase na rýchlu navigáciu z jedného záznamu do druhého, čo urýchľuje bodové dotazy.
    3. Vlastný filter môže „posoliť údaje“, čo znamená, že na začiatok kľúča riadku pridá hašovací bajt, aby mohol rýchlo vyhľadať záznamy.

Stručne povedané, Phoenix využíva priamy prístup k rozhraniam API, koprocesorom a vlastným filtrom HBase, aby vám poskytol výkon na milisekundách pre malé súbory údajov a výkon na druhej úrovni pre humongous. Spoločnosť Phoenix tieto funkcie predovšetkým vystavuje vývojárom prostredníctvom známeho rozhrania JDBC a SQL.

Začnite s Phoenixom

Aby ste mohli používať Phoenix, musíte si stiahnuť a nainštalovať HBase aj Phoenix. Stránku Phoenix na stiahnutie (a poznámky o kompatibilite s HBase) nájdete tu.

Stiahnutie a nastavenie

V čase písania tohto článku je najnovšia verzia Phoenixu 4.6.0 a na stránke na stiahnutie sa uvádza, že 4.x je kompatibilný s HBase verzie 0.98.1+. Pre môj príklad som si stiahol najnovšiu verziu Phoenixu, ktorá je nakonfigurovaná na prácu s HBase 1.1. Nájdete ho v priečinku: Phoenix-4.6.0-HBase-1.1 /.

Tu je nastavenie:

  1. Stiahnite a dekomprimujte tento archív a potom použite jednu z odporúčaných zrkadlových stránok tu na stiahnutie HBase. Napríklad som vybral zrkadlo, prešiel do priečinka 1.1.2 a stiahol hbase-1.1.2-bin.tar.gz.
  2. Dekomprimujte tento súbor a vytvorte súbor HBASE_HOME premenná prostredia, ktorá na ňu poukazuje; napríklad som do môjho pridal nasledovné ~ / .bash_profile súbor (v systéme Mac): export HBASE_HOME = / Používatelia / shaines / Na stiahnutie / hbase-1.1.2.

Integrujte Phoenix s HBase

Proces integrácie Phoenixu do HBase je jednoduchý:

  1. Skopírujte nasledujúci súbor z koreňového adresára Phoenixu do HBase lib adresár: phoenix-4.6.0-HBase-1.1-server.jar.
  2. Spustite HBase vykonaním nasledujúceho skriptu od HBase kôš adresár:./start-hbase.sh.
  3. Pri spustenom HBase otestujte, či Phoenix pracuje, vykonaním konzoly SQLLine vykonaním nasledujúceho príkazu od Phoenixu kôš adresár: ./sqlline.py localhost.

Konzola SQLLine

sqlline.py je skript v jazyku Python, ktorý spúšťa konzolu, ktorá sa pripája k adrese HBase's Zookeeper; localhost v tomto prípade. Tu si môžete prejsť príkladom, ktorý v tejto časti zhrniem.

Najskôr si vykonaním prezrime všetky tabuľky v HBase ! stôl:

 0: jdbc: phoenix: localhost>! Tables + --------------------------------------- --- + ------------------------------------------ + --- --------------------------------------- + ---------- -------------------------------- + ----------------- --------- + | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | POZNÁMKY + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + | | SYSTÉM | KATALÓG | TABUĽKA SYSTÉMU | | | SYSTÉM | FUNKCIA | TABUĽKA SYSTÉMU | | | SYSTÉM | POSTUPNOSŤ | TABUĽKA SYSTÉMU | | | SYSTÉM | ŠTÁTY | TABUĽKA SYSTÉMU | + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + 

Pretože toto je nová inštancia HBase, jediné tabuľky, ktoré existujú, sú systémové tabuľky. Tabuľku môžete vytvoriť vykonaním a vytvoriť tabuľku príkaz:

 0: jdbc: phoenix: localhost>vytvoriť test tabuľky (celé číslo mykey nie null primárny kľúč, mycolumn varchar); Nie sú ovplyvnené žiadne riadky (2,448 s) 

Tento príkaz vytvorí tabuľku s názvom test, s názvom celočíselného primárneho kľúča mykey a a varchar stĺpec s názvom mycolumn. Teraz vložte niekoľko riadkov pomocou upsert príkaz:

 0: jdbc: phoenix: localhost>upsert do testovacích hodnôt (1, 'Hello'); Ovplyvnený 1 riadok (0,142 sekundy) 0: jdbc: phoenix: localhost>upsert do testovacích hodnôt (2, 'World!'); Ovplyvnený 1 riadok (0,008 sekundy) 

UPSERT je príkaz SQL na vloženie záznamu, ak neexistuje, alebo aktualizáciu záznamu, ak existuje. V tomto prípade sme vložili (1, „Hello“) a (2, „World!“). Kompletné referencie príkazov Phoenix nájdete tu. Na záver zadajte dotaz do svojej tabuľky, aby ste videli hodnoty, ktoré ste zväčšili vykonaním vyberte * z testu:

 0: jdbc: phoenix: localhost>vyberte * z testu; + ------------------------------------------ + ------ ------------------------------------ + | MYKEY | MYCOLUMN | + ------------------------------------------ + ------ ------------------------------------ + | 1 | Ahoj | | 2 | Svet! | + ------------------------------------------ + ------ ------------------------------------ + 2 vybrané riadky (0,111 sekundy) 

Podľa očakávania sa zobrazia hodnoty, ktoré ste práve vložili. Ak chcete vyčistiť stôl, vykonajte a test pádovej tabuľky príkaz.