

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

HBase utilizza una funzionalità di [istantanea](https://hbase.apache.org/book.html#ops.snapshots) integrata per creare backup leggeri delle tabelle. Nel cluster EMR, questi backup possono essere esportati in Amazon S3 utilizzando EMRFS. È possibile 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 per Java Per ulteriori informazioni su altri tipi di HBase backup, consulta la sezione [HBase backup](https://hbase.apache.org/book.html#ops.backup) nella HBase documentazione.

## 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 per 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 `-mappers` valore durante l'esportazione di un'istantanea, 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 da: `command-runner.jar` 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 per 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>

Sebbene si tratti di un'importazione, l' HBase opzione utilizzata qui è comunque valida`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 per 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");
```

## Ripristina una tabella dalle istantanee all'interno della shell HBase
<a name="w2aac33c49c14"></a>

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

HBase attualmente non supporta tutti i comandi snapshot presenti nella HBase shell. Ad esempio, non esiste un'opzione da HBase riga di comando per ripristinare un'istantanea, quindi è 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 per Java:

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