Utilisation de HBase snapshots - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de HBase snapshots

HBaseutilise une fonctionnalité de capture instantanée intégrée pour créer des sauvegardes légères de tables. Dans les EMR clusters, ces sauvegardes peuvent être exportées vers Amazon S3 à l'aide deEMRFS. Vous pouvez créer un instantané sur le nœud principal à l'aide du HBase shell. Cette rubrique explique comment exécuter ces commandes de manière interactive avec le shell ou en effectuant une étape à l'command-runner.jaraide du AWS CLI ou AWS SDK for Java. Pour plus d'informations sur les autres types de HBase sauvegardes, consultez la section HBasesauvegarde dans la HBase documentation.

Création d'un instantané à l'aide d'une table

hbase snapshot create -n snapshotName -t tableName

En utilisant le fichier command-runner.jar depuis 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");
Note

Si votre nom d'instantané n'est pas unique, l'opération de création échoue avec un code de retour de -1 ou 255, mais vous ne verrez peut-être pas un message d'erreur indiquant ce qui s'est passé. Pour utiliser le même nom d'instantané, supprimez-le et recréez-le.

Suppression d’un instantané

hbase shell >> delete_snapshot 'snapshotName'

Affichage des informations d'instantané

hbase snapshot info -snapshot snapshotName

Exportation d'un instantané vers Amazon S3

Important

Si vous ne spécifiez aucune -mappers valeur lors de l'exportation d'un instantané, HBase utilise un calcul arbitraire pour déterminer le nombre de mappeurs. Cette valeur peut être très grande, selon la taille de votre table, ce qui affecte de façon négative des tâches exécutées selon l'exportation. Pour cette raison, nous vous recommandons de spécifier le paramètre -mappers, le paramètre -bandwidth (qui spécifie la consommation de bande passante en mégaoctets par seconde), ou les deux, pour limiter les ressources de cluster utilisées par l'opération d'exportation. Vous pouvez aussi exécuter l'opération d'instantané d'exportation durant une période de faible utilisation.

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

En utilisant command-runner.jar depuis 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");

Importer un instantané depuis Amazon S3

Bien qu'il s'agisse d'une importation, l'HBaseoption utilisée ici l'est toujoursexport.

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

En utilisant command-runner.jar depuis 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");

Restaurer une table à partir d'instantanés dans le shell HBase

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

HBasene prend actuellement pas en charge toutes les commandes de capture d'écran présentes dans le HBase shell. Par exemple, aucune option de HBase ligne de commande ne permet de restaurer un instantané. Vous devez donc le restaurer dans un shell. Cela signifie que command-runner.jar doit exécuter une commande Bash.

Note

Comme la commande utilisée ici l'estecho, il est possible que votre commande shell échoue même si la commande exécutée par Amazon EMR renvoie un code de 0 sortie. Vérifiez les journaux d'étape si vous choisissez d'exécuter une commande shell en tant qu'étape.

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

Voici l'étape utilisant l' AWS CLI. Commencez par créer le fichier snapshot.json suivant :

[ { "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");