HBase 스냅샷 사용 - Amazon EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HBase 스냅샷 사용

HBase는 기본 제공 스냅샷 기능을 사용하여 테이블의 경량 백업을 생성합니다. EMR 클러스터에서 이러한 백업은를 사용하여 Amazon S3로 내보낼 수 있습니다EMRFS. HBase 쉘을 사용하여 기본 노드에서 스냅샷을 생성할 수 있습니다. 이 주제에서는 쉘을 사용하여 대화형으로 또는 command-runner.jar AWS CLI 또는를 사용하여 단계를 통해 이러한 명령을 실행하는 방법을 보여줍니다 AWS SDK for Java. 다른 유형의 HBase 백업에 대한 자세한 내용은 HBase 설명서의 HBase 백업을 참조하세요.

테이블을 사용하여 스냅샷 생성

hbase snapshot create -n snapshotName -t tableName

에서 command-runner.jar 사용 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");
참고

스냅샷 이름이 고유하지 않으면 생성 작업이 -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://amzn-s3-demo-bucket/folder -mappers 2

command-runner.jar에서 사용 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");

Amazon S3에서 스냅샷 가져오기

이는 가져오기이지만 여기에 사용되는 HBase 옵션은 여전히 입니다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

command-runner.jar에서 사용 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");

HBase 쉘 내의 스냅샷에서 테이블 복원

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

HBase는 현재 HBase쉘에서 발견된 모든 스냅샷 명령을 지원하지 않습니다. 예를 들어 스냅샷을 복원하는 HBase 명령줄 옵션이 없으므로 쉘 내에서 복원해야 합니다. 즉 command-runner.jar에서 Bash 명령을 실행해야 합니다.

참고

여기에 사용되는 명령은 이므로 Amazon에서 실행하는 명령echo0 종료 코드를 EMR 반환하더라도 셸 명령이 여전히 실패할 수 있습니다. 셸 명령을 단계로 실행하도록 선택한 경우 단계 로그를 확인하십시오.

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