Den nuværende (4.2) udgivelse af CDH – Clouderas 100 % open source distribution af Apache Hadoop og relaterede projekter (inklusive Apache HBase) – introducerede en ny HBase-funktion, der for nylig er landet i trunk, der gør det muligt for en administrator at tage et øjebliksbillede af en specificeret tabel.
Før CDH 4.2 var den eneste måde at sikkerhedskopiere eller klone en tabel på at bruge Copy/Export Table, eller efter at have deaktiveret tabellen, kopiere alle h-filerne i HDFS. Kopier/eksporter tabel er et sæt værktøjer, der bruger MapReduce til at scanne og kopiere tabellen, men med en direkte indvirkning på regionsserverens ydeevne. Deaktivering af tabellen stopper al læsning og skrivning, hvilket næsten altid vil være uacceptabelt.
I modsætning hertil tillader HBase-snapshots en administrator at klone en tabel uden datakopier og med minimal indvirkning på regionsservere. Eksport af snapshot til en anden klynge påvirker ikke nogen af regionsserverne direkte; eksport er blot en distcp med en ekstra smule logik.
Her er et par af anvendelsesmulighederne for HBase-snapshots:
- Gendannelse fra bruger-/applikationsfejl
- Gendan/gendan fra en kendt sikker tilstand.
- Se tidligere snapshots og flet forskellen selektivt ind i produktion.
- Gem et øjebliksbillede lige før en større applikationsopgradering eller ændring.
- Revision og/eller rapportering om visninger af data på et bestemt tidspunkt
- Fang månedlige data til overholdelsesformål.
- Kør slutningen af dagen/måned/kvartalsrapporter.
- Applikationstest
- Test skema- eller applikationsændringer på data svarende til dem i produktionen fra et øjebliksbillede, og smid dem derefter væk. For eksempel:Tag et snapshot, opret en ny tabel fra snapshotindholdet (skema plus data), og manipuler den nye tabel ved at ændre skemaet, tilføje og fjerne rækker og så videre. (Den originale tabel, øjebliksbilledet og den nye tabel forbliver uafhængige af hinanden.)
- Aflastning af arbejde
- Tag et øjebliksbillede, eksporter det til en anden klynge, og kør dine MapReduce-job. Da eksportøjebliksbilledet fungerer på HDFS-niveau, sænker du ikke din primære HBase-klynge så meget, som CopyTable gør.
Hvad er et øjebliksbillede?
Et øjebliksbillede er et sæt metadataoplysninger, der gør det muligt for en administrator at vende tilbage til en tidligere tilstand af tabellen. Et øjebliksbillede er ikke en kopi af tabellen; det er kun en liste over filnavne og kopierer ikke dataene. En fuld gendannelse af øjebliksbillede betyder, at du vender tilbage til det tidligere "tabelskema", og du får dine tidligere data tilbage, og du mister eventuelle ændringer, der er foretaget siden snapshottet blev taget.
Betjening
- Tag et øjebliksbillede: Denne handling forsøger at tage et øjebliksbillede på en specificeret tabel. Handlingen kan mislykkes, hvis regioner bevæger sig rundt under balancering, opdeling eller fletning.
- Klon et øjebliksbillede: Denne handling opretter en ny tabel ved hjælp af det samme skema og med de samme data til stede i det angivne øjebliksbillede. Resultatet af denne handling er en ny fuldt funktionel tabel, der kan ændres uden at påvirke den originale tabel eller snapshottet.
- Gendan et øjebliksbillede: Denne handling bringer tabelskemaet og data tilbage til øjebliksbilledet. (Bemærk:denne handling kasserer alle ændringer, der er foretaget siden snapshottet blev taget.)
- Slet et øjebliksbillede: Denne handling fjerner et øjebliksbillede fra systemet og frigør ikke-delt diskplads uden at påvirke nogen kloner eller andre øjebliksbilleder.
- Eksporter et øjebliksbillede: Denne handling kopierer øjebliksbilledets data og metadata til en anden klynge. Operationen involverer kun HDFS, så der er ingen kommunikation med master- eller regionserverne, og dermed kan HBase-klyngen være nede.
Nul-kopi Snapshot, Restore, Clone
Den største forskel mellem et snapshot og en CopyTable/ExportTable er, at snapshot-operationerne kun skriver metadata. Der er ingen massive datakopier involveret.
Et af de vigtigste HBase-designprincipper er, at når først en fil er skrevet, vil den aldrig blive ændret. At have uforanderlige filer betyder, at et snapshot blot holder styr på de filer, der bruges i øjebliksbilledets operation, og under en komprimering er det snapshottets ansvar at informere systemet om, at filen ikke skal slettes, men i stedet skal den arkiveres.
Det samme princip gælder for en klonings- eller gendannelsesoperation. Da filerne er uforanderlige, oprettes der en ny tabel med blot "links" til de filer, som snapshottet refererer til.
Eksporter Snapshot er den eneste operation, der kræver en kopi af dataene, da den anden klynge ikke har datafilerne.
Eksportér Snapshot vs Kopier/Eksportér tabel
Bortset fra de bedre konsistensgarantier, som et øjebliksbillede kan give sammenlignet med et kopierings-/eksportjob, er den største forskel mellem at eksportere et øjebliksbillede og at kopiere/eksportere en tabel, at ExportSnapshot fungerer på HDFS-niveau. Dette betyder, at master- og regionsservere ikke er involveret i denne operation. Følgelig oprettes der ingen unødvendige caches til data, og der er ingen udløsning af yderligere GC-pauser på grund af antallet af objekter, der oprettes under scanningsprocessen. Ydeevnepåvirkningen på HBase-klyngen stammer fra den ekstra netværks- og diskbelastning, som DataNodes oplever.
HBase Shell:Snapshot Operations
Bekræft, at snapshot-understøttelse er aktiveret ved at kontrollere, om hbase.snapshot.enabled
egenskaben i hbase-site.xml er sat til sand. For at tage et øjebliksbillede af en specificeret tabel, brug snapshot
kommando. (Der udføres ingen filkopier)
hbase> snapshot ‘tableName’, ‘snapshotName’
Brug list_snapshot
for at liste alle snapshots kommando. det vil vise snapshotnavnet, kildetabellen og oprettelsesdatoen og -tidspunktet.
hbase> list_snapshots SNAPSHOT TABLE + CREATION TIME TestSnapshot TestTable (Mon Feb 25 21:13:49 +0000 2013)
For at fjerne et øjebliksbillede skal du bruge delete_snapshot
kommando. Fjernelse af et snapshot påvirker ikke klonede tabeller eller andre efterfølgende snapshots, der tages.
hbase> delete_snapshot 'snapshotName'
For at oprette en ny tabel fra et specificeret snapshot (klon), skal du bruge clone_snapshot
kommando. Der udføres ingen datakopier, så du ender ikke med at bruge dobbelt så meget plads til de samme data.
hbase> clone_snapshot 'snapshotName', 'newTableName'
For at erstatte det aktuelle tabelskema/data med et specificeret øjebliksbillede, skal du bruge restore_snapshot
kommando.
hbase> restore_snapshot 'snapshotName'
For at eksportere et eksisterende snapshot til en anden klynge skal du bruge ExportSnapshot
værktøj. Eksporten påvirker ikke RegionServers-arbejdsbyrden, den fungerer på HDFS-niveau, og du skal angive en HDFS-placering (hbase.rootdir for den anden klynge).
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot SnapshotName -copy-to hdfs:///srv2:8082/hbase
Nuværende begrænsninger
Snapshots er afhængige af nogle antagelser, og i øjeblikket er der et par værktøjer, der ikke er fuldt integreret med den nye funktion:
- Sletning af regioner, der refereres til af et snapshot, forårsager datatab på snapshottet og på klonede tabeller.
- Gendannelse af en tabel med replikering aktiveret for den gendanne tabel ender med at de to klynge ikke er synkroniseret. Tabellen er ikke gendannet på replikaen.
Konklusion
I øjeblikket inkluderer snapshot-funktionen al den grundlæggende nødvendige funktionalitet, men der er stadig meget arbejde at gøre, inklusive metrics, web-UI-integration, diskbrugsoptimeringer og mere.
For at lære mere om, hvordan du konfigurerer HBase og bruger snapshots, skal du gennemgå dokumentationen.
Matteo Bertozzi er softwareingeniør på platformsteamet og en HBase-committer.