View a markdown version of this page

Utilizzo di snapshot HBase - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di snapshot HBase

HBase utilizza una funzionalità snapshot integrata per creare backup leggeri di tabelle. Nel cluster EMR, questi backup possono essere esportati in Amazon S3 utilizzando EMRFS. Puoi creare un'istantanea sul nodo primario utilizzando la shell HBase. Questo argomento mostra come eseguire questi comandi in modo interattivo con la shell o tramite un passaggio utilizzando command-runner.jar o. AWS CLI AWS SDK per Java Per ulteriori informazioni su altri tipi di backup HBase, consulta la sezione HBase backup (Backup HBase) nella documentazione di HBase.

Creazione di uno snapshot utilizzando una tabella

hbase snapshot create -n snapshotName -t tableName

Utilizzo di command-runner.jar da: 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 per Java

HadoopJarStepConfig hbaseSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","create","-n","snapshotName","-t","tableName");
Nota

Se il nome dello snapshot non è univoco, l'operazione di creazione non riesce e restituisce un codice di -1 o 255, ma non viene visualizzato alcun messaggio di errore che indica cosa si è verificato. Per usare lo stesso nome snapshot, eliminarlo e quindi ricrearlo.

Eliminazione di uno snapshot

hbase shell >> delete_snapshot 'snapshotName'

Visualizzazione delle informazioni relative allo snapshot

hbase snapshot info -snapshot snapshotName

Esportazione di uno snapshot in Amazon S3

Importante

Se non si specifica un valore -mappers durante l'esportazione di uno snapshot, HBase utilizza un calcolo arbitrario per determinare il numero di mappatori. A seconda delle dimensioni della tabella, questo valore può essere molto grande e influenzare negativamente i processi in esecuzione durante l'esportazione. Per questo motivo, ti consigliamo di specificare il parametro -mappers, il parametro -bandwidth (che specifica l'utilizzo della larghezza di banda in MB al secondo) o entrambi per limitare le risorse del cluster utilizzate dall'operazione di esportazione. In alternativa, puoi eseguire l'operazione di esportazione dello snapshot durante un periodo di basso utilizzo.

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

Utilizzando command-runner.jar da 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 per Java:

HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("hbase","snapshot","export", "-snapshot","snapshotName","-copy-to", "s3://bucketName/folder", "-mappers","2","-bandwidth","50");

Importazione di uno snapshot da Amazon S3

Benché si tratti di un'importazione, l'opzione HBase utilizzata qui è ancora 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

Utilizzando command-runner.jar da 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 per 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");

Ripristino di una tabella da snapshot all'interno della shell HBase

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

HBase non supporta attualmente tutti i comandi della snapshot trovati nella shell HBase. Ad esempio, non esiste un'opzione della riga di comando HBase per ripristinare una snapshot, pertanto è necessario ripristinarla all'interno di una shell. Questo significa che command-runner.jar deve eseguire un comando Bash.

Nota

Poiché il comando utilizzato qui è echo, è possibile che il comando shell non riesca anche se il comando eseguito da Amazon EMR restituisce un codice di uscita 0. Se scegli di eseguire un comando della shell come una fase, controlla i log della fase.

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

Di seguito è riportata la fase utilizzando AWS CLI. Innanzitutto, crea il seguente file 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 per Java:

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