Programovanie

Recenzia: HBase je masívne škálovateľný - a nesmierne zložitý

Apache HBase sa označuje ako „databáza Hadoop“, čo môže byť trochu mätúce, pretože Hadoop sa zvyčajne chápe ako odkaz na populárny rámec spracovania MapReduce. Ale Hadoop je skutočne zastrešujúci názov pre celý ekosystém technológií, z ktorých niektoré HBase používa na vytvorenie distribuovanej, stĺpcovo orientovanej databázy postavenej na rovnakých princípoch ako Bigtable spoločnosti Google. HBase priamo nevyužíva možnosti Hadoop MapReduce, aj keď sa HBase môže integrovať s Hadoop ako zdroj alebo cieľ úloh MapReduce.

Charakteristickými znakmi HBase sú extrémna škálovateľnosť, vysoká spoľahlivosť a flexibilita schémy, ktorú získate zo stĺpcovo orientovanej databázy. Aj keď tabuľky a rodiny stĺpcov musia byť definované vopred, nové stĺpce môžete pridávať priebežne. HBase tiež ponúka silnú konzistenciu na úrovni riadkov, zabudované spravovanie verzií a „koprocesory“, ktoré poskytujú ekvivalenty spúšťačov a uložených procedúr.

[Tiež na: Vyrovnávanie veľkých dát: Cassandra vs. HBase | Ktorú čudnú databázu mám použiť? | Bossie Awards 2013: Najlepšie otvorené nástroje pre veľké dáta Zúčtovanie NoSQL: MongoDB vs. Couchbase | Získajte denné prehľady hlavných príbehov každý deň v dennom vestníku. ]

Produkt HBase je navrhnutý tak, aby podporoval dotazy na obrovské množiny údajov, a je optimalizovaný na výkon čítania. Pri písaní sa spoločnosť HBase snaží zachovať konzistenciu. Na rozdiel od „nakoniec konzistentnej“ Cassandry HBase neponúka rôzne nastavenia úrovne konzistencie (na potvrdenie zápisu po tom, čo ho jeden uzol napísal alebo ho uznieslo kvórum uzlov). Cena silnej konzistencie HBase teda spočíva v tom, že zápisy môžu byť pomalšie.

HDFS - distribuovaný súborový systém Hadoop - je základom ekosystému Hadoop a je ním súborový systém, na ktorom sídli HBase. HDFS, ktorý je navrhnutý tak, aby fungoval na komoditnom hardvéri a toleroval zlyhania členských uzlov, funguje najlepšie pre systémy dávkového spracovania, ktoré uprednostňujú prúdový prístup k veľkým súborom údajov. Zdá sa, že je to nevhodné pre náhodný prístup, ktorý by sa dal očakávať v databázových systémoch, ako je HBase. HBase však podniká kroky na kompenzáciu inak neprispôsobivého správania HDFS.

Zookeeper, ďalšia technológia Hadoop (aj keď ju už súčasné verzie motora Hadoop MapReduce nepoužívajú), je distribuovaná komunikačná a koordinačná služba. Aplikácia Zookeeper udržuje synchronizovanú dátovú štruktúru v pamäti, ku ktorej má prístup viac klientov. Dátová štruktúra je organizovaná ako súborový systém, hoci komponentmi štruktúry (znodes) môžu byť dátové kontajnery, ako aj prvky v hierarchickom strome. Predstavte si súborový systém, ktorého súborom môžu byť aj adresáre.

HBase používa Zookeeper na koordináciu aktivít klastra a na sledovanie stavu členských uzlov. Keď prevádzkujete klaster HBase, musíte paralelne spustiť aj Zookeeper. HBase bude predvolene spúšťať a spravovať Zookeeper, aj keď môžete nakonfigurovať HBase na použitie samostatne spravovaného nastavenia Zookeeper. Procesy servera Zookeeper môžete dokonca spustiť na rovnakom hardvéri ako ostatné procesy HBase, ale to sa neodporúča, najmä pre vysokoobjemový klaster HBase.

Ako funguje HBase

Presnejšie, riadok je kolekcia párov kľúč / hodnota, pričom kľúčom je identifikátor stĺpca a hodnotou je obsah bunky, ktorá existuje na križovatke konkrétneho riadku a stĺpca. Pretože je však HBase stĺpcovo orientovanou databázou, nemusia mať dva riadky v tabuľke rovnaké stĺpce. Kvôli ďalšej komplikácii sú dáta verzované v HBase. Skutočnými súradnicami hodnoty (bunky) je n-tica {kľúč riadku, kľúč stĺpca, časová pečiatka}. Okrem toho môžu byť stĺpce zoskupené do skupín stĺpcov, ktoré dávajú návrhárovi databázy ďalšiu kontrolu nad charakteristikami prístupu, pretože všetky stĺpce v rámci rodiny stĺpcov budú uložené v tesnej vzájomnej blízkosti.

Operácia zápisu v HBase najskôr zaznamená údaje do protokolu potvrdenia („denník zápisu“), potom do štruktúry vnútornej pamäte nazývanej MemStore. Keď sa MemStore naplní, vyprázdni sa na disk ako entita nazývaná HFile. Súbory HF sa ukladajú ako postupnosť dátových blokov s indexom pripojeným na koniec súboru. Ďalší index uchovávaný v pamäti urýchľuje vyhľadávanie údajov v súboroch HF.

Po napísaní sú súbory H nemenné. Ak je kľúč odstránený, HBase zaznamená špeciálnu značku „náhrobok“ na pamiatku odstránenia. Náhrobné kamene sa odstránia (rovnako ako odstránené údaje), keď sa súbory HF periodicky zhutňujú.

HBase sa pokúša uspokojiť operácie čítania najskôr cez MemStore. Ak to neurobí, HBase skontroluje ešte ďalšiu štruktúru v pamäti, BlockStore, čo je čítacia vyrovnávacia pamäť určená na doručovanie často čítaných údajov z pamäte, a nie z diskových súborov HFiles.

HBase rozkladá riadky podľa oblastí, ktoré sú definované rozsahom klávesov riadkov. Každý región v klastri HBase je riadený procesom RegionServer. Spravidla existuje jeden proces RegionServer na uzol HBase. Ako rastie množstvo údajov, HBase rozdelí oblasti a migruje súvisiace údaje do rôznych uzlov v klastri na účely vyváženia.

Klastrová architektúra HBase nie je úplne symetrická. Napríklad každý klaster musí mať jeden aktívny hlavný uzol. Viacero uzlov môže (a malo by) byť označených ako hlavné uzly, ale pri zavedení klastra sa kandidátske masters koordinujú tak, že úradujúcim masters je iba jeden. Je zodpovednosťou kapitána monitorovať regionálne servery, zvládnuť zlyhanie regionálneho servera a koordinovať rozdelenie oblastí.

Ak by zlyhal hlavný uzol, klaster môže stále pracovať v ustálenom stave - spravovať požiadavky na čítanie a zápis - ale nemôže vykonávať žiadnu z operácií, ktoré si vyžadujú koordináciu hlavného uzla (napríklad vyvažovanie). Preto je dobré špecifikovať viac hlavných uzlov; ak a kedy by mal úradujúci majster zlyhať, bude rýchlo vymenený.

Môžete bežať HBase na vrchole natívneho súborového systému pre vývojové účely, ale nasadený klaster HBase beží na HDFS, ktorý - ako už bolo spomenuté vyššie - sa javí pre HBase ako slabé ihrisko. Napriek základnému súborovému systému zameranému na streamovanie dosahuje HBase rýchle náhodné I / O. Túto mágiu dosahuje kombináciou dávkových zápisov do pamäte a pretrvávajúcich údajov na disk pomocou zlučovacích stromov štruktúrovaných do denníka. Výsledkom je, že všetky náhodné zápisy sa vykonávajú v pamäti, a keď sa údaje na disk prenesú, dáta sa najskôr zoradia a potom sa zapíšu postupne so sprievodným indexom. Ako je uvedené vyššie, najskôr sa v pamäti pokúsia o náhodné načítania. Ak požadované údaje nie sú v pamäti, je následné vyhľadávanie disku rýchle, pretože sú zoradené a indexované.

Práca s HBase

Aj keď HBase nepodporuje transakcie, nie je ani nakoniec konzistentný; skôr HBase podporuje silnú konzistenciu, minimálne na úrovni jedného riadku. HBase nemá zmysel pre dátové typy; všetko je uložené ako pole bajtov. HBase však definuje špeciálny údajový typ „počítadlo“, ktorý poskytuje operáciu prírastku atómu - čo je užitočné napríklad na počítanie zobrazení webovej stránky. Pomocou jedného hovoru môžete zvýšiť ľubovoľný počet počítadiel v jednom rade bez toho, aby ste museli riadok uzamknúť. Upozorňujeme, že počítadlá sa budú synchronizovať pre operácie zápisu (viacnásobné zápisy vždy vykonajú konzistentné prírastky), nie však nevyhnutne pre operácie čítania.

Shell HBase je vlastne upravený interaktívny Ruby shell bežiaci v JRuby, pričom Ruby sa spúšťa v prostredí Java VM. Čokoľvek, čo môžete robiť v interaktívnom prostredí Ruby, môžete robiť v prostredí HBase, čo znamená, že prostredie HBase môže byť výkonným skriptovacím prostredím.

Najnovšia verzia shellu poskytuje akési objektovo orientované rozhranie pre manipuláciu s tabuľkami HBase. Môžete napríklad priradiť tabuľku k premennej JRuby a potom vydať metódu na objekt tabuľky pomocou štandardného bodového zápisu. Napríklad, ak ste definovali tabuľku a priradili ju k myTable premennej, môžete zapísať (vložiť) údaje do tabuľky napríklad takto:

myTable.put '', '', ''

To by napísalo hodnotu do riadku v stĺpci .

Pre HBase existujú niektoré grafické rozhrania pre správu tretích strán, napríklad hbase-explorer. Samotná HBase obsahuje niektoré vstavané webové monitorovacie nástroje. Hlavný uzol HBase slúži webovému rozhraniu na porte 60010. Prejdite doň a nájdete informácie o samotnom hlavnom uzle vrátane času začiatku, aktuálneho portu Zookeeper, zoznamu regionálnych serverov, priemerného počtu regiónov na jednotlivé regionálne servery. , a tak ďalej. Poskytnutý je aj zoznam tabuliek. Kliknutím na tabuľku sa zobrazia informácie, ako napríklad regionálne servery, ktoré hosťujú komponenty tabuľky. Táto stránka poskytuje aj ovládacie prvky na spustenie zhutnenia tabuľky alebo na rozdelenie oblastí tabuľky.

Okrem toho každý uzol servera regiónu prevádzkuje monitorovacie webové rozhranie na porte 60030. Nájdete tu veľa metrík: napríklad latencie čítania a zápisu, rozdelené na rôzne percentily. Môžete tiež zobraziť informácie o regiónoch spravovaných týmto serverom regiónov a môžete vygenerovať výpis aktívnych vlákien na serveri.

Referenčná príručka HBase obsahuje príručku Začíname a časté otázky. Je to aktívny dokument, takže ku každej položke nájdete komentáre komunity používateľov. Webová stránka HBase tiež poskytuje odkazy na rozhranie HBase Java API, ako aj na videá a zdroje informácií HBase mimo servera. Viac informácií nájdete na wiki HBase. Aj keď je dobrá, dokumentácia HBase nie je celkom na rovnakej úrovni ako dokumentácia, ktorú som videl na iných stránkach s databázovými produktmi, ako sú Cassandra a MongoDB. Napriek tomu je na internete veľa materiálu a komunita HBase je dostatočne veľká a aktívna na to, aby akékoľvek otázky týkajúce sa HBase nezostali dlho nezodpovedané.

Jedným z najzaujímavejších nedávnych prírastkov HBase je podpora „koprocesorov“ - používateľského kódu, ktorý sa vykonáva ako súčasť procesov HBase RegionServer a Master. Existujú zhruba dva druhy koprocesorov: pozorovatelia a koncové body. Pozorovateľ je používateľom napísaná trieda Java, ktorá definuje metódy, ktoré sa majú vyvolať, keď dôjde k určitým udalostiam HBase. Predstavte si pozorovateľa ako náprotivok HBase k spúšťaču RDBMS. Jeden pozorovateľ, ktorý sa volá RegionObserver, môže nadviazať na konkrétne body v toku riadenia operácií manipulácie s údajmi, ako napríklad dostať, daťa vymazať.

Koprocesor koncového bodu HBase funguje podobne ako uložená procedúra. Po načítaní ho možno vyvolať napríklad od pozorovateľa, a tým umožňuje dynamické pridávanie nových funkcií do HBase. Existuje niekoľko spôsobov, ako načítať koprocesory do klastra HBase, napríklad cez shell HBase.

Konfigurácia veľkého klastra HBase môže byť zložitá. Klaster HBase obsahuje hlavné uzly, procesy RegionServer, procesy HDFS a celý klaster Zookeeper bežiaci vedľa seba. Je zrejmé, že riešenie problémov so zlyhaním môže byť zložité, pretože je potrebné preskúmať množstvo pohyblivých častí.

HBase je veľmi vývojárska databáza. Jeho online referenčná príručka je úzko prepojená s dokumentmi Java API HBase. Ak chcete pochopiť úlohu, ktorú hrá konkrétna entita HBase - napríklad Filter -, pripravte sa na odovzdanie do dokumentácie Java API triedy Filter, kde získate úplné vysvetlenie.

Vzhľadom na to, že prístup je riadkový a že riadky sú indexované kľúčmi riadkov, z toho vyplýva, že pre dobrý výkon je rozhodujúci starostlivý návrh štruktúry kľúčov riadkov. Je ironické, že programátori v starých dobrých dobách databáz ISAM (Indexed Sequential Access Method) to dobre vedeli: Prístup k databáze sa týkal všetkých komponentov - a ich usporiadania - v indexoch zložených kľúčov.

HBase zamestnáva zbierku technológií preverených bojom zo sveta Hadoop a pri budovaní veľkej, škálovateľnej, vysoko dostupnej distribuovanej databázy stojí za zváženie, najmä pre tie aplikácie, kde je dôležitá silná konzistencia.

Apache HBase 0.94 v skratke

 
Pros
  • Vstavaná verzia
  • Silná konzistencia na rekordnej úrovni
  • Poskytuje spúšťače a uložené procedúry podobné RDBMS prostredníctvom koprocesorov
  • Postavené na osvedčených technológiách Hadoop
  • Komunita aktívneho rozvoja
Zápory
  • Chýba priateľský dotazovací jazyk podobný SQL
  • Veľa pohyblivých častí
  • Inštalácia nad rámec vývojového klastra s jedným uzlom môže byť zložitá
PlatformyVyžaduje Java SE verzie 6; je možné spustiť vo Windows pomocou Cygwin
NákladyZadarmo, otvorený zdroj pod licenciou Apache verzie 2.0

Copyright sk.verticalshadows.com 2024

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