

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo di snapshot HBase
<a name="emr-hbase-snapshot"></a>

HBase utilizza una funzionalità [snapshot](https://hbase.apache.org/book.html#ops.snapshots) integrata per creare backup leggeri di tabelle. Nel cluster EMR, questi backup possono essere esportati in Amazon S3 utilizzando EMRFS. Puoi creare un'istantanea sul nodo primario utilizzando la shell HBase. Questo argomento mostra come eseguire questi comandi in modo interattivo con la shell o tramite un passaggio utilizzando `command-runner.jar` o. AWS CLI AWS SDK for Java Per ulteriori informazioni su altri tipi di backup HBase, consulta la sezione [HBase backup (Backup HBase)](https://hbase.apache.org/book.html#ops.backup) nella documentazione di HBase.

## Creazione di uno snapshot utilizzando una tabella
<a name="w2aac33c49b4"></a>

```
hbase snapshot create -n {{snapshotName}} -t {{tableName}}
```

Utilizzo di command-runner.jar da: 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");
```

**Nota**  
Se il nome dello snapshot non è univoco, l'operazione di creazione non riesce e restituisce un codice di `-1` o `255`, ma non viene visualizzato alcun messaggio di errore che indica cosa si è verificato. Per usare lo stesso nome snapshot, eliminarlo e quindi ricrearlo.

## Eliminazione di uno snapshot
<a name="w2aac33c49b6"></a>

```
hbase shell
>> delete_snapshot '{{snapshotName}}'
```

## Visualizzazione delle informazioni relative allo snapshot
<a name="w2aac33c49b8"></a>

```
hbase snapshot info -snapshot {{snapshotName}}
```

## Esportazione di uno snapshot in Amazon S3
<a name="w2aac33c49c10"></a>

**Importante**  
Se non si specifica un valore `-mappers` durante l'esportazione di uno snapshot, HBase utilizza un calcolo arbitrario per determinare il numero di mappatori. A seconda delle dimensioni della tabella, questo valore può essere molto grande e influenzare negativamente i processi in esecuzione durante l'esportazione. Per questo motivo, ti consigliamo di specificare il parametro `-mappers`, il parametro `-bandwidth` (che specifica l'utilizzo della larghezza di banda in MB al secondo) o entrambi per limitare le risorse del cluster utilizzate dall'operazione di esportazione. In alternativa, puoi eseguire l'operazione di esportazione dello snapshot durante un periodo di basso utilizzo.

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

Utilizzando `command-runner.jar` da 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");
```

## Importazione di uno snapshot da Amazon S3
<a name="w2aac33c49c12"></a>

Benché si tratti di un'importazione, l'opzione HBase utilizzata qui è ancora `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
```

Utilizzando `command-runner.jar` da 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");
```

## Ripristino di una tabella da snapshot all'interno della shell HBase
<a name="w2aac33c49c14"></a>

```
hbase shell
>> disable {{tableName}}
>> restore_snapshot {{snapshotName}}
>> enable {{tableName}}
```

HBase non supporta attualmente tutti i comandi della snapshot trovati nella shell HBase. Ad esempio, non esiste un'opzione della riga di comando HBase per ripristinare una snapshot, pertanto è necessario ripristinarla all'interno di una shell. Questo significa che `command-runner.jar` deve eseguire un comando Bash. 

**Nota**  
Poiché il comando utilizzato qui è `echo`, è possibile che il comando shell non riesca anche se il comando eseguito da Amazon EMR restituisce un codice di uscita `0`. Se scegli di eseguire un comando della shell come una fase, controlla i log della fase.

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

Di seguito è riportata la fase utilizzando AWS CLI. Innanzitutto, crea il seguente file `snapshot.json`:

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