Uso de instantáneas 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 HBase

HBaseutiliza una función de instantáneas integrada para crear copias de seguridad ligeras de las tablas. En EMR los clústeres, estas copias de seguridad se pueden exportar a Amazon S3 medianteEMRFS. 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 for Java. Para obtener más información sobre otros tipos de HBase copias de seguridad, consulte las HBasecopias de seguridad en la HBase documentación.

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 for 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 -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 for 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 HBase opción utilizada aquí sigue siéndoloexport.

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 for 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

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

HBaseactualmente no admite todos los comandos de captura de pantalla 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

Como el comando utilizado aquí esecho, es posible que el comando de shell siga fallando aunque el comando ejecutado por Amazon EMR devuelva un código de 0 salida. 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 for Java:

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