sql >> Databasteknik >  >> NoSQL >> HBase

Introduktion till Apache HBase Snapshots

Den nuvarande (4.2) utgåvan av CDH – Clouderas 100 % öppen källkodsdistribution av Apache Hadoop och relaterade projekt (inklusive Apache HBase) – introducerade en ny HBase-funktion, nyligen landad i trunk, som gör att en administratör kan ta en ögonblicksbild av en specificerad bord.

Före CDH 4.2 var det enda sättet att säkerhetskopiera eller klona en tabell att använda Copy/Export Table, eller efter att ha inaktiverat tabellen, kopiera alla h-filer i HDFS. Kopiera/exportera tabell är en uppsättning verktyg som använder MapReduce för att skanna och kopiera tabellen men med en direkt inverkan på regionserverns prestanda. Om du inaktiverar tabellen stoppas all läsning och skrivning, vilket nästan alltid är oacceptabelt.

Däremot tillåter HBase-ögonblicksbilder en administratör att klona en tabell utan datakopior och med minimal påverkan på regionservrar. Att exportera ögonblicksbilden till ett annat kluster påverkar inte direkt någon av regionservrarna; export är bara en distcp med lite extra logik.

Här är några av användningsfallen för HBase-ögonblicksbilder:

  • Återställning från användar-/applikationsfel
    • Återställ/återställ från ett känt säkert tillstånd.
    • Visa tidigare ögonblicksbilder och slå samman skillnaden selektivt till produktion.
    • Spara en ögonblicksbild precis innan en större programuppgradering eller ändring.
  • Revision och/eller rapportering om vyer av data vid en viss tidpunkt
    • Skapa månadsdata för efterlevnadsändamål.
    • Kör rapporter i slutet av dagen/månad/kvartal.
  • Programtestning
    • Testa schema- eller programändringar på data som liknar den i produktionen från en ögonblicksbild och kasta den sedan. Till exempel:ta en ögonblicksbild, skapa en ny tabell från ögonblicksbildens innehåll (schema plus data) och manipulera den nya tabellen genom att ändra schemat, lägga till och ta bort rader och så vidare. (Den ursprungliga tabellen, ögonblicksbilden och den nya tabellen förblir ömsesidigt oberoende.)
  • Avlastning av arbete
    • Ta en ögonblicksbild, exportera den till ett annat kluster och kör dina MapReduce-jobb. Eftersom exportögonblicksbilden fungerar på HDFS-nivå, saktar du inte ner ditt huvudsakliga HBase-kluster så mycket som CopyTable gör.

Vad är en ögonblicksbild?

En ögonblicksbild är en uppsättning metadatainformation som gör att en administratör kan återgå till ett tidigare tillstånd i tabellen. En ögonblicksbild är inte en kopia av tabellen; det är bara en lista med filnamn och kopierar inte data. En fullständig återställning av ögonblicksbild innebär att du går tillbaka till det tidigare "tabellschemat" och att du får tillbaka dina tidigare data utan att du förlorar alla ändringar som gjorts sedan ögonblicksbilden togs.

Verksamhet

  • Ta en ögonblicksbild: Denna åtgärd försöker ta en ögonblicksbild på en angiven tabell. Operationen kan misslyckas om regioner rör sig under balansering, splittring eller sammanslagning.
  • Klona en ögonblicksbild: Den här åtgärden skapar en ny tabell med samma schema och med samma data som finns i den angivna ögonblicksbilden. Resultatet av denna operation är en ny fullt fungerande tabell som kan ändras utan att den ursprungliga tabellen eller ögonblicksbilden påverkas.
  • Återställ en ögonblicksbild: Denna åtgärd återför tabellschemat och data till ögonblicksbildstillståndet. (Obs:denna operation ignorerar alla ändringar som gjorts sedan ögonblicksbilden togs.)
  • Ta bort en ögonblicksbild: Denna åtgärd tar bort en ögonblicksbild från systemet, vilket frigör odelat diskutrymme, utan att det påverkar några kloner eller andra ögonblicksbilder.
  • Exportera en ögonblicksbild: Denna åtgärd kopierar ögonblicksbildsdata och metadata till ett annat kluster. Operationen involverar bara HDFS så det finns ingen kommunikation med huvud- eller regionservrarna, och därför kan HBase-klustret vara nere.

Noll-copy Snapshot, Restore, Clone

Den största skillnaden mellan en ögonblicksbild och en CopyTable/ExportTable är att ögonblicksbildoperationerna endast skriver metadata. Det finns inga omfattande datakopior inblandade.

En av de viktigaste HBase designprinciperna är att när en fil väl är skriven kommer den aldrig att ändras. Att ha oföränderliga filer innebär att en ögonblicksbild bara håller reda på filer som används i ögonblicket för ögonblicksbildoperationen, och under en komprimering är det ögonblicksbildens ansvar att informera systemet om att filen inte ska raderas utan istället ska den arkiveras.

Samma princip gäller för en Clone- eller Restore-operation. Eftersom filerna är oföränderliga skapas en ny tabell med bara "länkar" till filerna som ögonblicksbilden refererar till.

Exportera ögonblicksbild är den enda operation som kräver en kopia av data, eftersom det andra klustret inte har datafilerna.

Exportera ögonblicksbild vs kopiera/exportera tabell

Bortsett från de bättre konsistensgarantierna som en ögonblicksbild kan ge jämfört med ett kopierings-/exportjobb, är den största skillnaden mellan att exportera en ögonblicksbild och att kopiera/exportera en tabell att ExportSnapshot fungerar på HDFS-nivå. Detta innebär att huvud- och regionservrar inte är inblandade i denna operation. Följaktligen skapas inga onödiga cacher för data och det finns ingen triggning av ytterligare GC-pauser på grund av antalet objekt som skapas under skanningsprocessen. Prestandapåverkan på HBase-klustret härrör från den extra nätverks- och diskbelastningen som DataNodes upplever.

HBase Shell:Snapshot Operations

Bekräfta att stöd för ögonblicksbilder är aktiverat genom att kontrollera om hbase.snapshot.enabled egenskapen i hbase-site.xml är satt till true. För att ta en ögonblicksbild av en angiven tabell, använd snapshot kommando. (Inga filkopior utförs)

hbase> snapshot ‘tableName’, ‘snapshotName’

För att lista alla ögonblicksbilder, använd list_snapshot kommando. det kommer att visa ögonblicksbildens namn, källtabellen och datum och tid för skapande.

hbase> list_snapshots
SNAPSHOT               TABLE + CREATION TIME
 TestSnapshot          TestTable (Mon Feb 25 21:13:49 +0000 2013)

För att ta bort en ögonblicksbild, använd delete_snapshot kommando. Att ta bort en ögonblicksbild påverkar inte klonade tabeller eller andra efterföljande ögonblicksbilder som tagits.

hbase> delete_snapshot 'snapshotName'

För att skapa en ny tabell från en specificerad ögonblicksbild (klon), använd clone_snapshot kommando. Inga datakopior utförs, så det slutar med att du inte använder dubbelt så mycket utrymme för samma data.

hbase> clone_snapshot 'snapshotName', 'newTableName'

För att ersätta nuvarande tabellschema/data med ett angivet ögonblicksbildinnehåll, använd restore_snapshot  kommando.

hbase> restore_snapshot 'snapshotName'

För att exportera en befintlig ögonblicksbild till ett annat kluster, använd ExportSnapshot verktyg. Exporten påverkar inte RegionServers arbetsbelastning, den fungerar på HDFS-nivå och du måste ange en HDFS-plats (hbase.rootdir för det andra klustret).

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot
SnapshotName -copy-to hdfs:///srv2:8082/hbase

Nuvarande begränsningar

Ögonblicksbilder förlitar sig på vissa antaganden, och för närvarande finns det ett par verktyg som inte är helt integrerade med den nya funktionen:

  • Att slå samman regioner som hänvisas till av en ögonblicksbild orsakar dataförlust på ögonblicksbilden och på klonade tabeller.
  • Återställning av en tabell med replikering på för den återställda tabellen slutar med att de två klustret inte är synkroniserade. Tabellen återställs inte på repliken.

Slutsats

För närvarande inkluderar ögonblicksbildsfunktionen alla grundläggande funktioner som krävs, men det finns fortfarande mycket arbete att göra, inklusive statistik, webbgränssnittsintegration, optimeringar av diskanvändning och mer.

Läs dokumentationen för att lära dig mer om hur du konfigurerar HBase och använder ögonblicksbilder.

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


  1. Komplexa datastrukturer Redis

  2. Förstå MongoDB Client Timeout-alternativ

  3. Varför finns det NYCKEL- och ARGV-matriser när man anropar Redis Lua-skript?

  4. Dumpa Mongo Collection till JSON-format