Schnappschüsse verwenden HBase - 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.

Schnappschüsse verwenden HBase

HBaseverwendet eine integrierte Snapshot-Funktionalität, um einfache Backups von Tabellen zu erstellen. In EMR Clustern können diese Backups mit nach Amazon S3 exportiert werdenEMRFS. 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 AWS SDK for Java verwendencommand-runner.jar. Weitere Informationen zu anderen Arten von HBase Backups finden Sie in der HBase Dokumentation unter HBaseBackup.

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 for 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 beim Exportieren eines Snapshots keinen -mappers Wert angeben, HBase verwendet eine willkürliche Berechnung, um die Anzahl der Mapper zu ermitteln. 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

Unter Verwendung 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 for 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 um einen Import handelt, ist die hier verwendete HBase Option immer noch gültigexport.

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 for 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");

Stellen Sie eine Tabelle aus Snapshots in der HBase Shell wieder her

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

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

Anmerkung

Da der hier verwendete Befehl lautetecho, ist es möglich, dass Ihr Shell-Befehl auch dann fehlschlägt, wenn der von Amazon ausgeführte Befehl einen 0 Exit-Code EMR 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 for Java:

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