Programování

Recenze: HBase je masivně škálovatelný - a nesmírně složitý

Apache HBase se popisuje jako „databáze Hadoop“, což může být trochu matoucí, protože Hadoop se obvykle chápe jako odkaz na populární rámec zpracování MapReduce. Ale Hadoop je skutečně zastřešující název pro celý ekosystém technologií, z nichž některé HBase používá k vytvoření distribuované, sloupcově orientované databáze postavené na stejných principech jako Bigtable společnosti Google. HBase nepoužívá přímo funkce Hadoop MapReduce, ačkoli se HBase může integrovat s Hadoop, aby sloužil jako zdroj nebo cíl úloh MapReduce.

Charakteristickými znaky HBase jsou extrémní škálovatelnost, vysoká spolehlivost a flexibilita schématu, kterou získáte z databáze orientované na sloupce. Zatímco tabulky a rodiny sloupců musí být definovány předem, můžete přidávat nové sloupce za běhu. HBase také nabízí silnou konzistenci na úrovni řádků, vestavěné správy verzí a „koprocesory“, které poskytují ekvivalenty spouštěčů a uložených procedur.

[Také na: Big data showdown: Cassandra vs. HBase | Kterou šílenou databázi mám použít? | Bossie Awards 2013: Nejlepší open source nástroje pro velká data | Show NoSQL: MongoDB vs. Couchbase | Získejte přehled klíčových příběhů každý den v denním zpravodaji. ]

HBase je navržen tak, aby podporoval dotazy na masivní datové sady, a je optimalizován pro výkon čtení. Pro zápisy se HBase snaží zachovat konzistenci. Na rozdíl od „nakonec konzistentní“ Cassandry nenabízí HBase různá nastavení úrovně konzistence (pro potvrzení zápisu poté, co jej napsal jeden uzel nebo kvorum uzlů). Cena silné konzistence HBase tedy spočívá v tom, že zápisy mohou být pomalejší.

HDFS - distribuovaný souborový systém Hadoop - je základem ekosystému Hadoop a je to souborový systém na jehož vrcholu sídlí HBase. HDFS, který je navržen tak, aby fungoval na komoditním hardwaru a toleroval selhání členských uzlů, funguje nejlépe pro systémy dávkového zpracování, které upřednostňují streamovaný přístup k velkým datovým sadám. To se zdá být nevhodné pro náhodný přístup, který by se očekával v databázových systémech, jako je HBase. HBase však podniká kroky ke kompenzaci jinak nepřiměřeného chování HDFS.

Zookeeper, další technologie Hadoop (i když ji současné verze modulu Hadoop MapReduce již nepoužívají), je distribuovaná komunikační a koordinační služba. Zookeeper udržuje synchronizovanou datovou strukturu v paměti, ke které má přístup více klientů. Datová struktura je organizována jako souborový systém, ačkoli komponenty struktury (znodes) mohou být datové kontejnery, stejně jako prvky v hierarchickém stromu. Představte si souborový systém, jehož soubory mohou být také adresáři.

HBase používá Zookeeper ke koordinaci aktivit klastru a sledování stavu členských uzlů. Když spustíte cluster HBase, musíte také paralelně spustit Zookeeper. HBase bude ve výchozím nastavení spouštět a spravovat Zookeeper, i když můžete nakonfigurovat HBase tak, aby používal samostatně spravované nastavení Zookeeper. Dokonce můžete spustit procesy serveru Zookeeper na stejném hardwaru jako ostatní procesy HBase, ale to se nedoporučuje, zejména pro velkoobjemový klastr HBase.

Jak HBase funguje

Přesněji řečeno, řádek je kolekce párů klíč / hodnota, klíčem je identifikátor sloupce a hodnotou je obsah buňky, která existuje na křižovatce konkrétního řádku a sloupce. Protože je však HBase databází orientovanou na sloupce, žádné dva řádky v tabulce nemusí mít stejné sloupce. Aby to ještě více zkomplikovalo, jsou data verzována v HBase. Skutečné souřadnice hodnoty (buňky) jsou n-tice {klíč řádku, klíč sloupce, časové razítko}. Kromě toho lze sloupce seskupit do rodin sloupců, což dává návrháři databáze další kontrolu nad charakteristikami přístupu, protože všechny sloupce v rodině sloupců budou uloženy v těsné blízkosti.

Operace zápisu v HBase nejprve zaznamenává data do protokolu potvrzení („zápis dopředu“), poté do struktury vnitřní paměti zvané MemStore. Když se MemStore naplní, vyprázdní se na disk jako entita zvaná HFile. Soubory HF jsou uloženy jako posloupnost datových bloků s indexem připojeným ke konci souboru. Další index uchovávaný v paměti zrychluje vyhledávání dat v souborech HF.

Po napsání jsou soubory H neměnné. Pokud je klíč odstraněn, HBase zaznamená speciální značku „náhrobku“ na památku odstranění. Náhrobní kameny jsou odstraněny (stejně jako odstraněná data), když jsou soubory HF periodicky zhutňovány.

HBase se pokouší nejprve uspokojit operace čtení prostřednictvím MemStore. Pokud tak neučiní, HBase zkontroluje ještě další strukturu v paměti, BlockStore, což je čtecí mezipaměť určená k doručování často čtených dat z paměti, spíše než z disků HFiles.

HBase rozděluje řádky podle oblastí, které jsou definovány řadou klíčů řádků. Každá oblast v klastru HBase je spravována procesem RegionServer. Typicky existuje jeden proces RegionServer na uzel HBase. Jak roste množství dat, HBase rozděluje oblasti a migruje přidružená data do různých uzlů v klastru pro účely vyvážení.

Klastrová architektura HBase není zcela symetrická. Například každý klastr musí mít jeden aktivní hlavní uzel. Více uzlů může (a mělo by) být označeno jako hlavní uzly, ale při spuštění klastru se hlavní kandidáti koordinují tak, že úřadující hlavní je pouze jeden. Je odpovědností pána sledovat servery regionu, zpracovat převzetí služeb při selhání regionálního serveru a koordinovat rozdělení regionů.

Pokud by havaroval hlavní uzel, klastr může stále pracovat v ustáleném stavu - spravovat požadavky na čtení a zápis - ale nemůže provádět žádnou z operací, které vyžadují koordinaci hlavního (například rebalancování). To je důvod, proč je vhodné určit více hlavních uzlů; pokud a kdy by měl vládnoucí pán selhat, bude rychle vyměněn.

Můžete spustit HBase na vrcholu nativního souborového systému pro účely vývoje, ale nasazený cluster HBase běží na HDFS, což - jak již bylo zmíněno dříve - vypadá jako špatné hřiště pro HBase. Přes základní souborový systém orientovaný na streamování dosahuje HBase rychlých náhodných I / O. Toto kouzlo dosahuje kombinací dávkových zápisů do paměti a přetrvávajících dat na disk pomocí sloučených stromů strukturovaných pomocí protokolu. Výsledkem je, že všechny náhodné zápisy jsou prováděny v paměti a když jsou data vyprázdněna na disk, jsou data nejprve tříděna a poté zapsána postupně s doprovodným indexem. Náhodné čtení je nejprve provedeno v paměti, jak je uvedeno výše. Pokud požadovaná data nejsou v paměti, je následné hledání disku rychlé, protože data jsou tříděna a indexována.

Práce s HBase

Zatímco HBase nepodporuje transakce, není ani konzistentní; spíše HBase podporuje silnou konzistenci, alespoň na úrovni jednoho řádku. HBase nemá smysl pro datové typy; vše je uloženo jako pole bajtů. HBase však definuje speciální datový typ „čítače“, který poskytuje operaci atomického přírůstku - což je užitečné například pro počítání zobrazení webové stránky. Můžete zvýšit libovolný počet čítačů v rámci jednoho řádku pomocí jediného volání a bez nutnosti uzamčení řádku. Všimněte si, že čítače budou synchronizovány pro operace zápisu (více zápisů vždy provede konzistentní přírůstky), ale ne nutně pro operace čtení.

Shell HBase je ve skutečnosti upravený, interaktivní Ruby shell běžící v JRuby, přičemž Ruby se spouští v prostředí Java VM. Cokoli můžete dělat v interaktivním prostředí Ruby, můžete dělat v prostředí HBase, což znamená, že prostředí HBase může být výkonným skriptovacím prostředím.

Nejnovější verze prostředí poskytuje jakési objektově orientované rozhraní pro manipulaci s tabulkami HBase. Můžete například přiřadit tabulku proměnné JRuby a poté vydat metodu na objekt tabulky pomocí standardní tečkové notace. Například pokud jste definovali tabulku a přiřadili ji k myTable proměnnou, můžete zapsat (dát) data do tabulky s něčím jako:

myTable.put '', '', ''

To by zapsalo hodnotu do řádku ve sloupci .

Pro HBase existují některá grafická uživatelská rozhraní pro správu třetích stran, například hbase-explorer. Samotná HBase obsahuje některé integrované webové monitorovací nástroje. Hlavní uzel HBase slouží webovému rozhraní na portu 60010. Přejděte na něj a najdete informace o samotném hlavním uzlu včetně času zahájení, aktuálního portu Zookeeper, seznamu regionálních serverů, průměrného počtu regionů na regionálních serverech , a tak dále. K dispozici je také seznam tabulek. Klikněte na tabulku a zobrazí se vám informace, jako jsou například servery regionů, které hostují komponenty tabulky. Tato stránka také poskytuje ovládací prvky pro zahájení zhutnění na tabulce nebo rozdělení oblastí tabulky.

Kromě toho každý uzel serveru regionu provozuje monitorovací webové rozhraní na portu 60030. Zde najdete spoustu metrik: latence čtení a zápisu, například rozdělené na různé percentily. Můžete také zobrazit informace o oblastech spravovaných tímto serverem regionu a můžete vygenerovat výpis aktivních vláken na serveru.

Referenční příručka HBase obsahuje příručku Začínáme a časté dotazy. Je to živý dokument, takže ke každé položce najdete komentáře komunity uživatelů. Web HBase také poskytuje odkazy na HBase Java API, stejně jako na videa a zdroje HBase informací mimo web. Více informací najdete na wiki HBase. I když je dobrá, dokumentace HBase není zcela srovnatelná s dokumentací, kterou jsem viděl na jiných webech databázových produktů, jako jsou Cassandra a MongoDB. Přesto je na internetu spousta materiálu a komunita HBase je dostatečně velká a aktivní, takže žádné otázky týkající se HBase nezůstanou dlouho nezodpovězeny.

Jedním z nejzajímavějších nedávných přírůstků HBase je podpora „koprocesorů“ - uživatelského kódu, který se spouští jako součást procesů HBase RegionServer a Master. Existují zhruba dva druhy koprocesorů: pozorovatelé a koncové body. Pozorovatel je uživatelem napsaná třída Java, která definuje metody, které mají být vyvolány, když dojde k určitým událostem HBase. Představte si pozorovatele jako protějšek HBase spouště RDBMS. Jeden pozorovatel, zvaný RegionObserver, může zavěsit konkrétní body v toku řízení operací manipulace s daty jako dostat, dát, a vymazat.

Koprocesor koncového bodu HBase funguje podobně jako uložená procedura. Po načtení jej lze vyvolat například od pozorovatele, a tím umožňuje dynamické přidávání nových funkcí do HBase. Existují různé způsoby, jak načíst koprocesory do klastru HBase, včetně prostřednictvím prostředí HBase.

Konfigurace velkého clusteru HBase může být obtížná. Klastr HBase zahrnuje hlavní uzly, procesy RegionServer, procesy HDFS a celý cluster Zookeeper běžící vedle sebe. Je zřejmé, že řešení problémů se selháním může být složitým úkolem, protože je třeba prozkoumat řadu pohyblivých částí.

HBase je velmi databáze zaměřená na vývojáře. Jeho online referenční příručka je silně propojena s dokumenty HBase Java API. Pokud chcete pochopit roli, kterou hraje určitá entita HBase - řekněme Filtr - buďte připraveni k předání do dokumentace k rozhraní Java API třídy Filtr pro úplné vysvětlení.

Vzhledem k tomu, že přístup je po řádcích a že řádky jsou indexovány klíči řádků, z toho vyplývá, že pečlivý návrh struktury klíče řádku je pro dobrý výkon zásadní. Je ironií, že programátoři ve starých dobrých dobách databází ISAM (metoda indexovaného sekvenčního přístupu) to dobře věděli: Přístup k databázím byl o komponentách - a jejich uspořádání - v indexech složených klíčů.

HBase využívá sbírku technologií prověřených bitvou ze světa Hadoop a při budování velké, škálovatelné a vysoce dostupné distribuované databáze stojí za zvážení, zejména pro ty aplikace, kde je důležitá silná konzistence.

Apache HBase 0.94 v kostce

 
Profesionálové
  • Integrovaná správa verzí
  • Silná konzistence na rekordní úrovni
  • Poskytuje spouštěče a uložené procedury podobné RDBMS prostřednictvím koprocesorů
  • Postaveno na osvědčených technologiích Hadoop
  • Aktivní rozvojová komunita
Nevýhody
  • Chybí přátelský dotazovací jazyk podobný SQL
  • Spousta pohyblivých částí
  • Instalace za vývojovým klastrem s jedním uzlem může být obtížná
PlatformyVyžaduje Java SE verze 6; lze spustit ve Windows pomocí Cygwin
NákladyZdarma, open source pod licencí Apache verze 2.0

Copyright cs.verticalshadows.com 2024

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