

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
<a name="emr-hbase-snapshot"></a>

HBase verwendet eine integrierte [Snapshot-Funktionalität](https://hbase.apache.org/book.html#ops.snapshots), um einfache Backups von Tabellen zu erstellen. 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 AWS SDK für Java verwenden`command-runner.jar`. Weitere Informationen zu anderen Arten von HBase Backups finden Sie in der HBase Dokumentation unter [HBase Backup](https://hbase.apache.org/book.html#ops.backup).

## Erstellen eines Snapshots mit einer Tabelle
<a name="w2aac33c49b4"></a>

```
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
<a name="w2aac33c49b6"></a>

```
hbase shell
>> delete_snapshot 'snapshotName'
```

## Anzeigen von Snapshot-Informationen
<a name="w2aac33c49b8"></a>

```
hbase snapshot info -snapshot snapshotName
```

## Einen Snapshot nach Amazon S3 exportieren
<a name="w2aac33c49c10"></a>

**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 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
<a name="w2aac33c49c12"></a>

Obwohl es sich um einen Import handelt, ist die hier verwendete HBase Option immer noch gültig`export`.

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

## Eine Tabelle aus Snapshots in der HBase Shell wiederherstellen
<a name="w2aac33c49c14"></a>

```
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, 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 `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");
```