sql >> Databasteknik >  >> NoSQL >> HBase

Introduktion till Apache HBase Snapshots, del 2:Deeper Dive

I del 1 av den här serien om Apache HBase-ögonblicksbilder lärde du dig hur du använder den nya Snapshots-funktionen och lite teori bakom implementeringen. Nu är det dags att dyka in i de tekniska detaljerna lite djupare.

Vad är en tabell?

En HBase-tabell består av en uppsättning metadatainformation och en uppsättning nyckel/värdepar:

  • Tabellinformation :En manifestfil som beskriver tabellen "inställningar", som kolumnfamiljer, komprimerings- och kodningskodekar, bloomfiltertyper och så vidare.
  • Regioner :Tabellen "partitioner" kallas regioner. Varje region är ansvarig för att hantera en sammanhängande uppsättning nyckel/värden, och de definieras av en startnyckel och en slutnyckel.
  • WALs/MemStore :Innan data skrivs på disk skrivs puts till Write Ahead Log (WAL) och lagras sedan i minnet tills minnestrycket utlöser en flush till disk. WAL ger ett enkelt sätt att återställa filer som inte spolas till disken vid fel.
  • HF-filer :Vid något tillfälle spolas all data till disken; en HFile är HBase-formatet som innehåller den/de lagrade nyckeln/värdena. HFiler är oföränderliga men kan raderas vid komprimering eller regionborttagning.

(Obs:För att lära dig mer om HBase Write Path, ta en titt på HBase Write Path-blogginlägget.)

Vad är en ögonblicksbild?

En ögonblicksbild är en uppsättning metadatainformation som gör det möjligt för administratören att återgå till ett tidigare tillstånd för tabellen den tas på. En ögonblicksbild är inte en kopia av tabellen; det enklaste sättet att tänka på det är som en uppsättning operationer för att hålla reda på metadata (tabellinformation och regioner) och data (HF-filer, memstore, WALs). Inga kopior av data är inblandade under ögonblicksbildoperationen.

  • Snapshots offline :Det enklaste fallet för att ta en ögonblicksbild är när en tabell är inaktiverad. Att inaktivera en tabell innebär att all data rensas på disken, och inga skrivningar eller läsningar accepteras. I det här fallet är att ta en ögonblicksbild bara en fråga om att gå igenom tabellens metadata och HFiles på disken och behålla en referens till dem. Mastern utför denna operation, och den tid som krävs bestäms huvudsakligen av den tid som krävs av HDFS-namnnoden för att tillhandahålla listan med filer.
  • Ögonblicksbilder online :I de flesta situationer är dock tabeller aktiverade och varje regionserver hanterar put and get-förfrågningar. I det här fallet tar mastern emot ögonblicksbildsbegäran och ber varje regionserver att ta en ögonblicksbild av de regioner som den är ansvarig för.

Kommunikationen mellan master- och regionservrarna sker via Apache ZooKeeper med en tvåfas commit-liknande transaktion. Mastern skapar en znod som betyder "förbered ögonblicksbilden". Varje regionserver kommer att behandla begäran och förbereda ögonblicksbilden för regionerna från tabellen som den är ansvarig för. När de är klara lägger de till en undernod till förberedelse-begäran-znoden med betydelsen "jag är klar".

När alla regionservrar har rapporterat tillbaka sin status, skapar mastern en annan znod som betyder "Beställ ögonblicksbild"; varje regionserver kommer att slutföra ögonblicksbilden och rapportera status som innan de gick med i noden. När alla regionservrar har rapporterat tillbaka kommer mastern att slutföra ögonblicksbilden och markera operationen som klar. Om en regionserver rapporterar ett fel kommer mastern att skapa en ny znod som används för att sända avbrytmeddelandet.

Eftersom regionservern kontinuerligt bearbetar nya förfrågningar, kan olika användningsfall kräva olika konsistensmodeller. Till exempel kan någon vara intresserad av en slarvig ögonblicksbild utan den nya datan i MemStore, någon annan kanske vill ha en helt konsekvent ögonblicksbild som kräver låsning av skrivningar ett tag, och så vidare.

Av denna anledning är proceduren för att ta en ögonblicksbild på regionservern pluggbar. För närvarande är den enda implementeringen som finns närvarande "Flush Snapshot", som utför en spolning innan du tar en ögonblicksbild och garanterar endast radkonsistens. Andra procedurer med olika konsekvenspolicyer kan komma att implementeras i framtiden.

I onlinefallet begränsas tiden som krävs för att ta en ögonblicksbild av den tid som krävs av den långsammaste regionservern för att utföra ögonblicksbildoperationen och rapportera framgång tillbaka till mastern. Denna operation är vanligtvis i storleksordningen några sekunder.

Arkivering

Som vi har sett tidigare är HFiles oföränderliga. Detta tillåter oss att undvika att kopiera data under ögonblicksbilden eller klonoperationerna, men under komprimering tas de bort och ersätts av en komprimerad version. I det här fallet, om du har en ögonblicksbild eller en klonad tabell som refererar till en av dessa filer, flyttas de till en "arkiv"-plats istället för att ta bort dem. Om du tar bort en ögonblicksbild och ingen annan refererar till filerna som ögonblicksbilden refererar till, kommer dessa filer att raderas.

Klona och återställa tabeller

Snapshots kan ses som en backuplösning där de kan användas för att återställa/återställa en tabell efter ett användar- eller applikationsfel, men ögonblicksbildsfunktionen kan tillåta mycket mer än en enkel backup-and-restore. Efter att ha klonat en tabell från en ögonblicksbild kan du skriva ett MapReduce-jobb eller en enkel applikation för att selektivt slå samman skillnaderna, eller vad du tycker är viktigt, till produktion. Ett annat användningsfall är att du kan testa schemaändringar eller uppdateringar av data utan att behöva vänta i timmar på en tabellkopia och utan att få massor av data duplicerad på disken.

Klona en tabell från en ögonblicksbild

När en administratör utför en klonoperation skapas en ny tabell med tabellschemat som finns i ögonblicksbilden fördelad med start/slut-nycklarna i information om ögonblicksbildregionerna. När tabellens metadata har skapats, istället för att kopiera in data, används samma knep som med ögonblicksbilden. Eftersom hFiles är oföränderliga skapas bara en referens till källfilen; detta tillåter operationen att undvika datakopior och låter klonen redigeras utan att påverka källtabellen eller ögonblicksbilden. Klonoperationen utförs av mastern.

Återställ en tabell från en ögonblicksbild

Återställningsoperationen liknar klonoperationen; du kan tänka på det som att ta bort tabellen och klona den från ögonblicksbilden. Återställningsoperationen tar tillbaka de gamla data som finns i ögonblicksbilden och tar bort all data från tabellen som inte också finns i ögonblicksbilden, och även tabellens schema återställs till det för ögonblicksbilden. Under huven implementeras återställningen genom att göra en skillnad mellan tabelltillståndet och ögonblicksbilden, ta bort filer som inte finns i ögonblicksbilden och lägga till referenser till de i ögonblicksbilden men som inte finns i det aktuella läget. Tabellbeskrivningen är också modifierad för att återspegla tabellens "schema" vid ögonblicksbilden. Återställningen utförs av mastern och tabellen måste inaktiveras.

Futures

För närvarande inkluderar snapshotimplementeringen all grundläggande funktionalitet som krävs. Som vi har sett kan nya konsistenspolicyer för ögonblicksbilder för online-ögonblicksbilder ge mer flexibilitet, konsekvens eller prestandaförbättringar. Bättre filhantering kan minska belastningen på HDFS-namnnoden och förbättra diskutrymmeshanteringen. Dessutom finns statistik, webbgränssnitt (Hue) med mera på att-göra-listan.

Slutsats

HBase-ögonblicksbilder lägger till ny funktionalitet som "procedurkoordinering" som används av online-ögonblicksbilden, eller kopiera-på-skriv-ögonblicksbilden, återställningen och klonerna.

Snapshots ger ett snabbare och bättre alternativ till handgjorda "säkerhetskopierings"- och "kloningslösningar" baserade på distcp eller CopyTable. Alla ögonblicksbildoperationer (ögonblicksbild, återställning, klon) involverar inte datakopior, vilket resulterar i snabbare ögonblicksbilder av tabellen och besparingar på diskutrymme.

För mer information om hur du aktiverar och använder ögonblicksbilder, se HBase operations management doc.

Matteo Bertozzi är en mjukvaruingenjör i plattformsteamet och en HBase Committer.


  1. Django Celery Elastic Beanstalk handledare inget sådant processfel

  2. MongoDB en till många relation

  3. MongoDB-skal och server matchar inte

  4. MongoDB-verktyg från gemenskapen som kompletterar ClusterControl