

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de instantáneas HBase
<a name="emr-hbase-snapshot"></a>

HBase utiliza una función de [instantáneas](https://hbase.apache.org/book.html#ops.snapshots) integrada para crear copias de seguridad ligeras de las tablas. En los clústeres de EMR, estas copias de seguridad se pueden exportar a Amazon S3 mediante EMRFS. Puede crear una instantánea en el nodo principal mediante el HBase shell. En este tema se muestra cómo ejecutar estos comandos de forma interactiva con el shell o mediante un paso mediante `command-runner.jar` el comando AWS CLI o AWS SDK para Java. Para obtener más información sobre otros tipos de HBase copias de seguridad, consulte las [HBase copias de seguridad](https://hbase.apache.org/book.html#ops.backup) en la HBase documentación.

## Crear una instantánea con una tabla
<a name="w2aac33c49b4"></a>

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

Uso de command-runner.jar desde 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 para Java

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

**nota**  
Si su nombre de instantánea no es único, la operación de creación devuelve un código `-1` o `255`, pero es posible que no vea un mensaje de error que indique que se realizó incorrectamente. Para utilizar el mismo nombre de instantánea, elimínelo y, a continuación, vuelva a crearlo.

## Eliminar una instantánea
<a name="w2aac33c49b6"></a>

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

## Ver información de instantánea
<a name="w2aac33c49b8"></a>

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

## Exportar una instantánea a Amazon S3
<a name="w2aac33c49c10"></a>

**importante**  
Si no especifica un `-mappers` valor al exportar una instantánea, HBase utiliza un cálculo arbitrario para determinar el número de mapeadores. Este valor pueden ser muy grande en función del tamaño de la tabla, lo que afecta negativamente a la ejecución de trabajos durante la exportación. Por este motivo, le recomendamos que especifique el parámetro `-mappers`, el parámetro `-bandwidth` (que especifica el consumo de ancho de banda en megabytes por segundo) o ambos para limitar los recursos del clúster utilizados por la operación de exportación. De forma alternativa, puede ejecutar la operación de exportación de instantánea durante un periodo de bajo consumo.

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

Se utiliza `command-runner.jar` desde: 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 para Java:

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

## Importar instantáneas desde Amazon S3
<a name="w2aac33c49c12"></a>

Aunque se trata de una importación, la HBase opción utilizada aquí sigue siéndolo`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
```

Usando `command-runner.jar` desde 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 para 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");
```

## Restaurar una tabla a partir de instantáneas del shell HBase
<a name="w2aac33c49c14"></a>

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

HBase actualmente no admite todos los comandos de instantáneas que se encuentran en el HBase shell. Por ejemplo, no existe una opción de HBase línea de comandos para restaurar una instantánea, por lo que debe restaurarla dentro de un shell. Esto significa que `command-runner.jar` debe ejecutar un comando Bash. 

**nota**  
Dado que el comando que se utiliza aquí es `echo`, es posible que el comando del intérprete de comandos siga devolviendo errores incluso si el comando ejecutado por Amazon EMR devuelve un código de salida `0`. Consulte los registros de pasos, si decide ejecutar un comando de shell como paso.

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

Este es el paso utilizando la AWS CLI. En primer lugar, cree el siguiente archivo `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 para Java:

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