View a markdown version of this page

Usar snapshots do HBase - Amazon EMR

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á.

Usar snapshots do HBase

O HBase usa uma funcionalidade interna de snapshots 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 snapshot no nó primário usando o shell do HBase. 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 ouAWS SDK para Java. Para obter mais informações sobre outros tipos de backups do HBase, consulte HBase backup, na documentação do HBase.

Criar um snapshot usando uma tabela

hbase snapshot create -n snapshotName -t tableName

Usando o command-runner.jar a partir doAWS 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

hbase shell >> delete_snapshot 'snapshotName'

Exibir informações do snapshot

hbase snapshot info -snapshot snapshotName

Exportar um snapshot para o Amazon S3

Importante

Se você não especificar um valor -mappers ao exportar um snapshot, o HBase usará 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 doAWS 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

Apesar de ser uma importação, a opção do HBase 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 doAWS 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 de snapshots dentro do shell do HBase

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

Atualmente, o HBase não oferece suporte a todos os comandos de snapshot encontrados no shell do HBase. Por exemplo, não há uma opção de linha de comando do HBase para restaurar um snapshot e, portanto, 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");