V části 1 této série o snímcích Apache HBase jste se naučili používat novou funkci Snímky a trochu teorie za implementací. Nyní je čas ponořit se do technických detailů trochu hlouběji.
Co je tabulka?
Tabulka HBase obsahuje sadu informací o metadatech a sadu párů klíč/hodnota:
- Informace o tabulce :Soubor manifestu, který popisuje „nastavení tabulky“, jako jsou rodiny sloupců, kompresní a kódovací kodeky, typy filtrů květů a tak dále.
- Regiony :Tabulkové „oddíly“ se nazývají regiony. Každá oblast je zodpovědná za zpracování souvislé sady klíčů a hodnot a jsou definovány počátečním a koncovým klíčem.
- WAL/MemStore :Před zápisem dat na disk jsou vklady zapsány do protokolu WAL (Write Ahead Log) a poté uloženy v paměti, dokud tlak paměti nespustí vyprázdnění disku. WAL poskytuje snadný způsob obnovy dat, která nebyla vyprázdněna na disk při selhání.
- Soubory :V určitém okamžiku jsou všechna data vyprázdněna na disk; HFfile je formát HBase, který obsahuje uložené hodnoty klíče/hodnoty. HFiles jsou neměnné, ale lze je odstranit při komprimaci nebo odstranění oblasti.
(Poznámka:Chcete-li se dozvědět více o HBase Write Path, podívejte se na blogový příspěvek HBase Write Path.)
Co je to snímek?
Snímek je sada informací o metadatech, která správci umožňuje vrátit se do předchozího stavu tabulky, na které je pořízen. Snímek není kopií tabulky; Nejjednodušší způsob, jak o tom přemýšlet, je jako soubor operací pro sledování metadat (informace o tabulkách a regionech) a dat (soubory HFiles, memstore, WAL). Během operace snímku nejsou zahrnuty žádné kopie dat.
- Offline snímky :Nejjednodušší případ pro pořízení snímku je, když je tabulka deaktivována. Zakázání tabulky znamená, že všechna data jsou vyprázdněna na disk a nejsou přijímány žádné zápisy ani čtení. V tomto případě je pořízení snímku pouze záležitostí procházení metadat tabulky a souborů HFiles na disku a uchování odkazu na ně. Hlavní server provede tuto operaci a požadovaný čas je určen především časem, který potřebuje jmenný uzel HDFS k poskytnutí seznamu souborů.
- Online snímky :Ve většině situací jsou však tabulky povoleny a každý regionální server zpracovává požadavky vložení a získání. V tomto případě hlavní server obdrží požadavek na snímek a požádá každý server regionu, aby pořídil snímek regionů, za které je zodpovědný.
Komunikace mezi hlavním a regionálním serverem se provádí přes Apache ZooKeeper pomocí dvoufázové transakce podobné potvrzení. Master vytvoří znode, který znamená „připravte snímek“. Každý regionový server zpracuje požadavek a připraví snímek pro regiony z tabulky, za kterou je zodpovědný. Jakmile jsou hotovi, přidají poduzel do uzlu přípravné žádosti s významem „Jsem hotový“.
Jakmile všechny servery regionu ohlásí svůj stav, hlavní server vytvoří další uzel, který znamená „Potvrdit snímek“; každý regionální server dokončí snímek a ohlásí stav jako před připojením k uzlu. Jakmile se všechny servery regionu ohlásí, hlavní server dokončí snímek a označí operaci jako dokončenou. V případě, že regionální server ohlásí selhání, master vytvoří nový uzel používaný k vysílání zprávy o přerušení.
Protože regionální server neustále zpracovává nové požadavky, různé případy použití mohou vyžadovat různé modely konzistence. Někoho může například zajímat nedbalý snímek bez nových dat v MemStore, někdo jiný může chtít plně konzistentní snímek, který vyžaduje na chvíli zamykání zápisů a tak dále.
Z tohoto důvodu je postup pro pořízení snímku na regionálním serveru připojitelný. V současnosti je jedinou implementací „Flush Snapshot“, která před pořízením snímku provede vyprázdnění a zaručuje pouze konzistenci řádků. V budoucnu mohou být implementovány další postupy s odlišnými zásadami konzistence.
V případě online je doba potřebná k pořízení snímku omezena dobou, kterou server nejpomalejší oblasti potřebuje k provedení operace snímku a nahlášení úspěchu zpět hlavnímu serveru. Tato operace obvykle trvá několik sekund.
Archivace
Jak jsme viděli dříve, HFiles jsou neměnné. To nám umožňuje vyhnout se kopírování dat během operací snímku nebo klonování, ale během komprimace jsou odstraněna a nahrazena komprimovanou verzí. V tomto případě, pokud máte snímek nebo klonovanou tabulku, která odkazuje na jeden z těchto souborů, místo jejich odstranění se přesunou do „archivačního“ umístění. Pokud smažete snímek a nikdo jiný neodkazuje na soubory, na které snímek odkazuje, tyto soubory budou smazány.
Klonování a obnova tabulek
Snapshoty lze považovat za řešení zálohování, kde je lze použít k obnovení/obnovení tabulky po chybě uživatele nebo aplikace, ale funkce snímku může umožnit mnohem více než jen jednoduché zálohování a obnovení. Po naklonování tabulky ze snímku můžete napsat úlohu MapReduce nebo jednoduchou aplikaci pro selektivní sloučení rozdílů nebo toho, co považujete za důležité, do produkce. Dalším případem použití je, že můžete testovat změny schématu nebo aktualizace dat, aniž byste museli čekat hodiny na kopii tabulky a aniž byste skončili se spoustou dat duplikovaných na disku.
Klonujte tabulku ze snímku
Když administrátor provede operaci klonování, vytvoří se nová tabulka se schématem tabulky přítomným ve snímku předem rozdělená s klíči start/end v informacích o regionech snímku. Po vytvoření metadat tabulky se místo kopírování dat použije stejný trik jako u snímku. Protože soubory HFiles jsou neměnné, vytvoří se pouze odkaz na zdrojový soubor; to umožňuje operaci vyhnout se kopírování dat a umožňuje úpravu klonu bez dopadu na zdrojovou tabulku nebo snímek. Operaci klonování provádí hlavní server.
Obnovení tabulky ze snímku
Operace obnovy je podobná operaci klonování; můžete si to představit jako smazání tabulky a její klonování ze snímku. Operace obnovení vrátí stará data přítomná ve snímku a odstraní všechna data z tabulky, která nejsou také ve snímku, a také schéma tabulky se vrátí na schéma snímku. Pod kapotou je obnovení implementováno provedením rozdílu mezi stavem tabulky a snímkem, odstraněním souborů, které nejsou přítomny ve snímku, a přidáním odkazů na ty ve snímku, které nejsou přítomné v aktuálním stavu. Také deskriptor tabulky je upraven tak, aby odrážel „schéma“ tabulky v okamžiku snímku. Operaci obnovení provádí hlavní server a tabulka musí být deaktivována.
Budoucnosti
V současné době implementace snapshotu zahrnuje všechny základní požadované funkce. Jak jsme viděli, nové zásady konzistence snímků pro online snímky mohou poskytnout větší flexibilitu, konzistenci nebo zlepšení výkonu. Lepší správa souborů může snížit zatížení názvového uzlu HDFS a zlepšit správu místa na disku. Kromě toho jsou na seznamu úkolů metriky, webové uživatelské rozhraní (Hue) a další.
Závěr
Snímky HBase přidávají nové funkce, jako je „koordinace procedur“ používaná online snímkem nebo snímek kopírování při zápisu, obnova a klony.
Snímky poskytují rychlejší a lepší alternativu k ručně vyráběným řešením „zálohování“ a „klonování“ založených na distcp nebo CopyTable. Všechny operace se snímky (snímek, obnovení, klonování) nezahrnují kopie dat, což má za následek rychlejší snímky tabulky a úsporu místa na disku.
Další informace o tom, jak povolit a používat snímky, naleznete v dokumentu HBase pro provozní řízení.
Matteo Bertozzi je softwarový inženýr v týmu Platform a HBase Committer.