View a markdown version of this page

Uso de instantáneas de HBase - Amazon EMR

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 de HBase

HBase utiliza una funcionalidad de instantáneas integrada para crear copias de seguridad ligeras de 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 shell de HBase. En este tema se muestra cómo ejecutar estos comandos de forma interactiva con el shell o siguiendo un paso mediante el comando o. command-runner.jar AWS CLI AWS SDK para Java Para obtener más información sobre otros tipos de copias de seguridad de HBase, consulte Copia de seguridad de HBase en la documentación de HBase.

Crear una instantánea con una tabla

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

hbase shell >> delete_snapshot 'snapshotName'

Ver información de instantánea

hbase snapshot info -snapshot snapshotName

Exportar una instantánea a Amazon S3

importante

Si no especifica un valor -mappers 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

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=[ "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

Aunque se trata de una importación, la opción de HBase utilizado aquí sigue siendo 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 desde instantáneas dentro del shell HBase

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

HBase actualmente no admite todos los comandos de instantánea que se encuentran en el shell de HBase. Por ejemplo, no hay ninguna opción de línea de comando de HBase para restaurar una instantánea, por lo que debe restaurarlo desde 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");