HBase
 sql >> Datenbank >  >> NoSQL >> HBase

Einführung in Apache HBase-Snapshots

Die aktuelle (4.2) Version von CDH – Clouderas 100 % Open-Source-Distribution von Apache Hadoop und verwandten Projekten (einschließlich Apache HBase) – führte eine neue HBase-Funktion ein, die kürzlich im Trunk gelandet ist und es einem Administrator ermöglicht, einen Schnappschuss eines bestimmten zu erstellen Tabelle.

Vor CDH 4.2 bestand die einzige Möglichkeit zum Sichern oder Klonen einer Tabelle darin, Tabelle kopieren/exportieren zu verwenden oder nach dem Deaktivieren der Tabelle alle hfiles in HDFS zu kopieren. Copy/Export Table ist eine Reihe von Tools, die MapReduce verwenden, um die Tabelle zu scannen und zu kopieren, jedoch mit direkter Auswirkung auf die Leistung des Region Servers. Das Deaktivieren der Tabelle stoppt alle Lese- und Schreibvorgänge, was fast immer inakzeptabel ist.

Im Gegensatz dazu ermöglichen HBase-Snapshots einem Administrator, eine Tabelle ohne Datenkopien und mit minimalen Auswirkungen auf Regionsserver zu klonen. Das Exportieren des Snapshots in einen anderen Cluster wirkt sich nicht direkt auf einen der Regionsserver aus; export ist nur ein distcp mit einem zusätzlichen bisschen Logik.

Hier sind einige Anwendungsfälle für HBase-Snapshots:

  • Wiederherstellung nach Benutzer-/Anwendungsfehlern
    • Wiederherstellen/Wiederherstellen aus einem bekannten sicheren Zustand.
    • Sehen Sie sich frühere Snapshots an und führen Sie die Unterschiede selektiv in die Produktion ein.
    • Speichern Sie einen Snapshot unmittelbar vor einem größeren Anwendungs-Upgrade oder einer Änderung.
  • Überprüfung und/oder Berichterstattung über Ansichten von Daten zu bestimmten Zeiten
    • Erfassen Sie monatliche Daten für Compliance-Zwecke.
    • Führen Sie Tages-/Monats-/Quartalsberichte aus.
  • Anwendungstests
    • Testen Sie Schema- oder Anwendungsänderungen an Daten ähnlich denen in der Produktion aus einem Snapshot und verwerfen Sie sie dann. Beispiel:Erstellen Sie einen Snapshot, erstellen Sie eine neue Tabelle aus dem Snapshot-Inhalt (Schema plus Daten) und bearbeiten Sie die neue Tabelle, indem Sie das Schema ändern, Zeilen hinzufügen und entfernen und so weiter. (Die ursprüngliche Tabelle, der Snapshot und die neue Tabelle bleiben voneinander unabhängig.)
  • Verlagerung von Arbeit
    • Machen Sie einen Snapshot, exportieren Sie ihn in einen anderen Cluster und führen Sie Ihre MapReduce-Jobs aus. Da der Export-Snapshot auf HDFS-Ebene arbeitet, verlangsamen Sie Ihren Haupt-HBase-Cluster nicht so sehr wie CopyTable.

Was ist ein Snapshot?

Ein Snapshot ist eine Reihe von Metadateninformationen, die es einem Administrator ermöglichen, zu einem früheren Zustand der Tabelle zurückzukehren. Ein Snapshot ist keine Kopie der Tabelle; Es ist nur eine Liste von Dateinamen und kopiert die Daten nicht. Eine vollständige Snapshot-Wiederherstellung bedeutet, dass Sie zum vorherigen „Tabellenschema“ zurückkehren und Ihre vorherigen Daten wiederherstellen, wobei alle Änderungen, die seit der Erstellung des Snapshots vorgenommen wurden, verloren gehen.

Operationen

  • Snapshot erstellen:Dieser Vorgang versucht, einen Snapshot für eine bestimmte Tabelle zu erstellen. Der Vorgang kann fehlschlagen, wenn sich Regionen während des Ausgleichens, Teilens oder Zusammenführens bewegen.
  • Einen Snapshot klonen:Dieser Vorgang erstellt eine neue Tabelle mit demselben Schema und mit denselben Daten, die im angegebenen Snapshot vorhanden sind. Das Ergebnis dieser Operation ist eine neue voll funktionsfähige Tabelle, die ohne Auswirkung auf die ursprüngliche Tabelle oder den Snapshot geändert werden kann.
  • Einen Snapshot wiederherstellen:Dieser Vorgang versetzt das Tabellenschema und die Daten zurück in den Snapshot-Zustand. (Hinweis:Dieser Vorgang verwirft alle Änderungen, die seit der Erstellung des Snapshots vorgenommen wurden.)
  • Löschen eines Snapshots: Dieser Vorgang entfernt einen Snapshot aus dem System und gibt nicht freigegebenen Speicherplatz frei, ohne Klone oder andere Snapshots zu beeinträchtigen.
  • Snapshot exportieren:Dieser Vorgang kopiert die Snapshot-Daten und Metadaten in einen anderen Cluster. Der Vorgang umfasst nur HDFS, sodass keine Kommunikation mit dem Master oder den Regionsservern stattfindet und der HBase-Cluster daher ausfallen kann.

Zero-Copy-Snapshot, Wiederherstellen, Klonen

Der Hauptunterschied zwischen einem Snapshot und einer CopyTable/ExportTable besteht darin, dass die Snapshot-Vorgänge nur Metadaten schreiben. Es sind keine massiven Datenkopien erforderlich.

Eines der wichtigsten Designprinzipien von HBase ist, dass eine einmal geschriebene Datei nie mehr geändert wird. Unveränderliche Dateien zu haben bedeutet, dass ein Snapshot nur die Dateien verfolgt, die zum Zeitpunkt des Snapshot-Vorgangs verwendet wurden, und während einer Komprimierung ist es die Verantwortung des Snapshots, das System darüber zu informieren, dass die Datei nicht gelöscht, sondern stattdessen archiviert werden soll.

Das gleiche Prinzip gilt für einen Klon- oder Wiederherstellungsvorgang. Da die Dateien unveränderlich sind, wird eine neue Tabelle nur mit „Links“ zu den Dateien erstellt, auf die der Snapshot verweist.

Snapshot exportieren ist der einzige Vorgang, der eine Kopie der Daten erfordert, da der andere Cluster nicht über die Datendateien verfügt.

Snapshot exportieren vs. Tabelle kopieren/exportieren

Abgesehen von den besseren Konsistenzgarantien, die ein Snapshot im Vergleich zu einem Kopier-/Exportauftrag bieten kann, besteht der Hauptunterschied zwischen dem Exportieren eines Snapshots und dem Kopieren/Exportieren einer Tabelle darin, dass ExportSnapshot auf HDFS-Ebene arbeitet. Das bedeutet, dass Master- und Regionsserver an diesen Vorgängen nicht beteiligt sind. Somit werden keine unnötigen Caches für Daten angelegt und es kommt nicht zum Auslösen zusätzlicher GC-Pausen durch die Anzahl der während des Scan-Vorgangs erzeugten Objekte. Die Auswirkung auf die Leistung des HBase-Clusters ergibt sich aus der zusätzlichen Netzwerk- und Plattenarbeitslast, der die DataNodes ausgesetzt sind.

HBase Shell:Snapshot-Operationen

Bestätigen Sie, dass die Snapshot-Unterstützung aktiviert ist, indem Sie prüfen, ob hbase.snapshot.enabled -Eigenschaft in hbase-site.xml auf „true“ gesetzt ist. Um einen Snapshot einer bestimmten Tabelle zu erstellen, verwenden Sie snapshot Befehl. (Es werden keine Dateikopien durchgeführt)

hbase> snapshot ‘tableName’, ‘snapshotName’

Um alle Snapshots aufzulisten, verwenden Sie list_snapshot Befehl. Es zeigt den Snapshot-Namen, die Quelltabelle sowie Erstellungsdatum und -zeit an.

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

Um einen Snapshot zu entfernen, verwenden Sie delete_snapshot Befehl. Das Entfernen eines Snapshots wirkt sich nicht auf geklonte Tabellen oder andere später erstellte Snapshots aus.

hbase> delete_snapshot 'snapshotName'

Um eine neue Tabelle aus einem angegebenen Snapshot (Klon) zu erstellen, verwenden Sie clone_snapshot Befehl. Es werden keine Datenkopien durchgeführt, sodass Sie nicht den doppelten Speicherplatz für dieselben Daten verwenden.

hbase> clone_snapshot 'snapshotName', 'newTableName'

Verwenden Sie restore_snapshot , um das aktuelle Tabellenschema/Daten durch einen bestimmten Snapshot-Inhalt zu ersetzen Befehl.

hbase> restore_snapshot 'snapshotName'

Um einen vorhandenen Snapshot in einen anderen Cluster zu exportieren, verwenden Sie ExportSnapshot Werkzeug. Der Export wirkt sich nicht auf die Workload des RegionServers aus, er funktioniert auf HDFS-Ebene und Sie müssen einen HDFS-Speicherort angeben (das hbase.rootdir des anderen Clusters).

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

Aktuelle Einschränkungen

Snapshots basieren auf einigen Annahmen, und derzeit gibt es einige Tools, die nicht vollständig in die neue Funktion integriert sind:

  • Das Zusammenführen von Regionen, auf die von einem Snapshot verwiesen wird, führt zu Datenverlust auf dem Snapshot und auf geklonten Tabellen.
  • Das Wiederherstellen einer Tabelle mit aktivierter Replikation für die wiederhergestellte Tabelle führt dazu, dass die beiden Cluster nicht mehr synchron sind. Die Tabelle wird auf dem Replikat nicht wiederhergestellt.

Schlussfolgerung

Derzeit enthält die Snapshot-Funktion alle grundlegenden erforderlichen Funktionen, aber es gibt noch viel zu tun, einschließlich Metriken, Web-UI-Integration, Optimierung der Festplattennutzung und mehr.

Weitere Informationen zum Konfigurieren von HBase und zum Verwenden von Snapshots finden Sie in der Dokumentation.

Matteo Bertozzi ist Software Engineer im Platform-Team und HBase-Committer.