View a markdown version of this page

Verwenden von HBase-Snapshots - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von HBase-Snapshots

HBase nutzt eine integrierte Snapshot- Funktionalität zum Erstellen kleiner Tabellensicherungen. In EMR-Clustern können diese Sicherungen mit EMRFS nach Amazon S3 exportiert werden. Sie können mithilfe der HBase-Shell einen Snapshot auf dem primären Knoten erstellen. In diesem Thema erfahren Sie, wie Sie diese Befehle interaktiv mit der Shell oder in einem Schritt ausführen, indem Sie entweder das AWS CLI oder verwendencommand-runner.jar. AWS SDK für Java Weitere Informationen zu anderen Arten von HBase-Sicherungen finden Sie unter HBase Backup in der HBase-Dokumentation.

Erstellen eines Snapshots mit einer Tabelle

hbase snapshot create -n snapshotName -t tableName

Verwenden von command-runner.jar aus dem AWS CLI:

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar",\ Args=[ "hbase", "snapshot", "create","-n","snapshotName","-t","tableName"]

AWS SDK für Java

HadoopJarStepConfig hbaseSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","create","-n","snapshotName","-t","tableName");
Anmerkung

Wenn Ihr Snapshot-Name nicht eindeutig ist, schlägt der Erstellvorgang mit dem Rückgabecode -1 oder 255 fehl. Gegebenenfalls wird aber keine Fehlermeldung mit den Details zum Fehler angezeigt. Um den gleichen Snapshot-Namen zu verwenden, löschen Sie ihn und erstellen Sie ihn dann erneut.

Löschen eines Snapshots

hbase shell >> delete_snapshot 'snapshotName'

Anzeigen von Snapshot-Informationen

hbase snapshot info -snapshot snapshotName

Einen Snapshot nach Amazon S3 exportieren

Wichtig

Wenn Sie keinen -mappers-Wert zum Exportieren eines Snapshots angeben, verwendet HBase eine beliebige Berechnung zur Bestimmung der Mapper-Anzahl. Dieser Wert kann je nach Tabellengröße sehr hoch sein, was sich negativ auf beim Export laufende Aufträge auswirkt. Aus diesem Grund empfehlen wir, den Parameter -mappers, den Parameter -bandwidth (der den Bandbreitenverbrauch in Megabyte pro Sekunde angibt) oder beide anzugeben, um die von der Exportoperation verwendeten Cluster-Ressourcen zu begrenzen. Alternativ können Sie die Operation zum Exportieren des Snapshots während eines Zeitraums mit geringer Auslastung ausführen.

hbase snapshot export -snapshot snapshotName \ -copy-to s3://amzn-s3-demo-bucket/folder -mappers 2

Verwenden command-runner.jar von AWS CLI:

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar",\ Args=[ "hbase", "snapshot", "export","-snapshot","snapshotName","-copy-to","s3://amzn-s3-demo-bucket/folder","-mappers","2","-bandwidth","50"]

AWS SDK für Java:

HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","export", "-snapshot","snapshotName","-copy-to", "s3://bucketName/folder", "-mappers","2","-bandwidth","50");

Importieren eines Snapshots von Amazon S3

Obwohl es sich hier um einen Import handelt, wird auch hier die HBase-Option export verwendet.

sudo -u hbase hbase snapshot export \ -D hbase.rootdir=s3://amzn-s3-demo-bucket/folder \ -snapshot snapshotName \ -copy-to hdfs://masterPublicDNSName:8020/user/hbase \ -mappers 2

Verwendung command-runner.jar aus dem AWS CLI:

aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Name="HBase Shell Step",Jar="command-runner.jar", \ Args=["sudo","-u","hbase","hbase snapshot export","-snapshot","snapshotName", \ "-D","hbase.rootdir=s3://amzn-s3-demo-bucket/folder", \ "-copy-to","hdfs://masterPublicDNSName:8020/user/hbase","-mappers","2","-chmod","700"]

AWS SDK für Java:

HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("sudo","-u","hbase","hbase","snapshot","export", "-D","hbase.rootdir=s3://path/to/snapshot", "-snapshot","snapshotName","-copy-to", "hdfs://masterPublicDNSName:8020/user/hbase", "-mappers","2","-chuser","hbase");

Wiederherstellen einer Tabelle von Snapshots innerhalb der HBase-Shell

hbase shell >> disable tableName >> restore_snapshot snapshotName >> enable tableName

HBase unterstützt derzeit nicht alle Snapshot-Befehle in der HBase-Shell. Beispielsweise gibt es keine HBase-Befehlszeilenoption zum Wiederherstellen eines Snapshots. Deshalb müssen Sie diesen innerhalb einer Shell wiederherstellen. Dies bedeutet, dass command-runner.jar einen Bash-Befehl ausführen muss.

Anmerkung

Da der hier verwendete Befehl echo lautet, ist es möglich, dass Ihr Shell-Befehl trotzdem fehlschlägt, selbst wenn der von Amazon EMR ausgeführte Befehl den Beendigungscode 0 zurückgibt. Überprüfen Sie die Schrittprotokolle, wenn Sie einen Shell-Befehl als Schritt ausführen möchten.

echo 'disable tableName; \ restore_snapshot snapshotName; \ enable tableName' | hbase shell

Nachfolgend finden Sie den Schritt mit der AWS CLI. Erstellen Sie zunächst die folgende snapshot.json-Datei:

[ { "Name": "restore", "Args": ["bash", "-c", "echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"tableName\"' | hbase shell"], "Jar": "command-runner.jar", "ActionOnFailure": "CONTINUE", "Type": "CUSTOM_JAR" } ]
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps file://./snapshot.json

AWS SDK für Java:

HadoopJarStepConfig hbaseRestoreSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("bash","-c","echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"snapshotName\"' | hbase shell");