HBase のスナップショットを使用する - Amazon EMR

HBase のスナップショットを使用する

HBase では、組み込みのスナップショット機能を使用して、テーブルの軽量バックアップが作成されます。EMR クラスターでは、EMRFS を使用してこれらのバックアップを Amazon S3 にエクスポートすることもできます。HBase シェルを使用すると、マスターノードのスナップショットも作成できます。このトピックでは、シェルを使用して対話方式で、あるいは AWS CLI または AWS SDK for Java で command-runner.jar を使用する手順で、これらのコマンドを実行する方法を説明します。HBase バックアップの他の種類については、HBase のドキュメントで「HBase Backup」の項を参照してください。

テーブルを使用してスナップショットを作成する

hbase snapshot create -n snapshotName -t tableName

AWS CLI からの command-runner.jar の使用

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");
注記

スナップショット名が一意でない場合、作成処理はリターンコード -1 または 255 で失敗になりますが、問題点を記述したエラーメッセージが表示されない可能性があります。同じスナップショット名を使用するには、いったん削除してから再作成してください。

スナップショットを削除する

hbase shell >> delete_snapshot 'snapshotName'

スナップショット情報を表示する

hbase snapshot info -snapshot snapshotName

Amazon S3 にスナップショットをエクスポートする

重要

スナップショットをエクスポートするときに -mappers 値を指定しないと、HBase は任意の計算を使用してマッパーの数を判断します。この値は、テーブルサイズによっては非常に大きくなる場合があり、エクスポート時のジョブの実行に悪影響を及ぼします。したがって、-mappers パラメータ、-bandwidth パラメータ (帯域幅の消費をメガバイト/秒で指定)、または両方を指定してエクスポートオペレーションで使用されるクラスターリソースを制限することをお勧めします。または、使用量が低下する期間にスナップショットのエクスポートオペレーションを実行できます。

hbase snapshot export -snapshot snapshotName \ -copy-to s3://bucketName/folder -mappers 2

AWS CLI からの command-runner.jar の使用

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://bucketName/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");

Amazon S3 からスナップショットをインポートする

操作はインポートですが、ここで使用する HBase は export です。

sudo -u hbase hbase snapshot export \ -D hbase.rootdir=s3://bucketName/folder \ -snapshot snapshotName \ -copy-to hdfs://masterPublicDNSName:8020/user/hbase \ -mappers 2

AWS CLI からの command-runner.jar の使用

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://bucketName/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");

HBase シェル内のスナップショットからテーブルを復元する

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

HBase では現在、HBase シェルで見つかるスナップショットコマンドがすべてサポートされていません。たとえば、スナップショットを復元する HBase コマンドラインオプションはないため、シェルで復元する必要があります。つまり、command-runner.jar で Bash コマンドを実行する必要があります。

注記

ここで使用されているコマンドは echo であるため、Amazon EMR で実行されたコマンドが終了コード 0 を返しても、シェルコマンドは失敗する可能性があります。ステップとしてシェルコマンドを実行する場合は、ステップログを確認してください。

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

AWS CLI を使用するステップを次に示します。まず、以下の内容 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");