

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usando HBase instantâneos
<a name="emr-hbase-snapshot"></a>

HBase usa uma funcionalidade de [captura instantânea](https://hbase.apache.org/book.html#ops.snapshots) integrada para criar backups leves de tabelas. Em clusters EMR, esses backups podem ser exportados para o Amazon S3 usando o EMRFS. Você pode criar um instantâneo no nó primário usando o HBase shell. Este tópico mostra como executar esses comandos interativamente com o shell ou por meio de uma etapa usando `command-runner.jar` o AWS CLI ou AWS SDK para Java. Para obter mais informações sobre outros tipos de HBase backups, consulte [HBase backup](https://hbase.apache.org/book.html#ops.backup) na HBase documentação.

## Criar um snapshot usando uma tabela
<a name="w2aac33c49b4"></a>

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

Usando o command-runner.jar a partir do 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**  
Se o nome do snapshot não for exclusivo, a operação de criação falhará com um código de retorno `-1` ou `255`, mas talvez você não veja uma mensagem de erro afirmando o que deu errado. Para usar o mesmo nome de snapshot, exclua-o e recrie-lo em seguida.

## Excluir um snapshot
<a name="w2aac33c49b6"></a>

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

## Exibir informações do snapshot
<a name="w2aac33c49b8"></a>

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

## Exportar um snapshot para o Amazon S3
<a name="w2aac33c49c10"></a>

**Importante**  
Se você não especificar um `-mappers` valor ao exportar um instantâneo, HBase usa um cálculo arbitrário para determinar o número de mapeadores. Esse valor pode ser muito grande, dependendo do tamanho da tabela, o que afeta negativamente os trabalhos em execução durante a exportação. Por esse motivo, recomendamos que você especifique o parâmetro `-mappers`, o parâmetro `-bandwidth` (que indica o consumo de largura de banda em megabytes por segundo) ou ambos para limitar os recursos de cluster usados pela operação de exportação. Como alternativa, você pode executar a operação de exportação de snapshot durante um período de baixa utilização.

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

Usando `command-runner.jar` a partir do 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 um snapshot do Amazon S3
<a name="w2aac33c49c12"></a>

Embora seja uma importação, a HBase opção usada aqui ainda é`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` a partir do 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 uma tabela a partir de instantâneos dentro do shell HBase
<a name="w2aac33c49c14"></a>

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

HBase atualmente não oferece suporte a todos os comandos de snapshot encontrados no HBase shell. Por exemplo, não há opção de HBase linha de comando para restaurar um snapshot, então você deve restaurá-lo em um shell. Isso significa que `command-runner.jar` deve executar um comando Bash. 

**nota**  
Como o comando usado aqui é `echo`, é possível que seu comando shell ainda falhe, mesmo que o comando executado pelo Amazon EMR retorne um código de saída `0`. Verifique os logs de etapas se você optar por executar um comando shell como um etapa.

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

Veja a seguir a etapa usando a AWS CLI. Primeiro, crie o seguinte arquivo `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");
```