View a markdown version of this page

Utilisation des instantanés HBase - 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 des instantanés HBase

HBase utilise une fonctionnalité d'instantané intégrée pour créer des sauvegardes légères des tables. Dans les clusters EMR, ces sauvegardes peuvent être exportées vers Amazon S3 à l'aide d'EMRFS. Vous pouvez créer un instantané sur le nœud principal à l'aide du shell HBase. 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 pour Java. Pour plus d'informations sur les autres types de sauvegardes HBase, consultez Sauvegarde HBase dans la documentation HBase.

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 pour 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 pas une valeur -mappers lors de l'exportation d'un instantané, HBase utilise un calcul arbitraire pour déterminer le nombre d'outils de mappage. 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 à partir du 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 pour 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'option HBase utilisée ici est encore 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

En utilisant command-runner.jar à partir du 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 pour 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");

Restauration d'une table à partir d'instantanés au sein du shell HBase

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

HBase ne prend actuellement pas en charge toutes les commandes d'instantané trouvées dans le shell HBase. Par exemple, il n'existe aucune option de ligne de commande HBase pour restaurer un instantané. Vous devez donc le restaurer au sein d'un shell. Cela signifie que command-runner.jar doit exécuter une commande Bash.

Note

Comme la commande utilisée ici est echo, il est possible que votre commande shell échoue encore même si la commande exécutée par Amazon EMR retourne un code de sortie 0. 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 pour Java:

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